【Go】Go语言中的基本数据类型与类型转换

news2024/11/24 19:50:58

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • go数据类型
    • 布尔数据类型
    • 整形 int
    • 浮点型
      • 验证:浮点数计算时不精确的
    • 特殊的数字类型
    • 字符串类型
    • 转义字符
  • go数据类型转换

go数据类型

Go语言是一种静态类型、编译型语言,它提供了丰富的数据类型用于处理各种数据。
在Go中,数据类型主要分为两大类:基本数据类型和派生数据类型。值类型包括整型、浮点型、布尔型、字符串等,而派生数据类型则包括指针、数组、结构体、函数、切片、映射、通道和接口等。本文将通过实际案例详细讲解Go语言中的基本数据类型及其用法。
在这里插入图片描述

布尔数据类型

布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
bool的默认值是false

package main

import "fmt"

func main() {
    // bool类型,只有两个值 true 和 false。  对和错
    // 定义变量  bool 布尔类型的定义 与 int、string 都是Go语言中基本数据类型。
    var b1 bool
    var b2 bool

    b1 = true
    b2 = false
    // f 格式化输出  %d 整数  %s 字符串 %p内存地址  %T 类型 %t bool值
    fmt.Printf("b1=%T,%t\n", b1, b1)
    fmt.Printf("b2=%T,%t\n", b2, b2)

    // 比大小
    var a int = 1
    var b int = 2
    // 如果  xxx  否则 xxx
    // 结果就是bool类型
    fmt.Println(a > b)
    if a > b {
        fmt.Println("a是大于b的")
        // .....
    } else {
        fmt.Println("a是小于b的")
    }

    // bool 类型的默认值 false, 规定  false  0   true = 1
    var b3 bool
    fmt.Println("bool默认值:", b3)

}

在这里插入图片描述

整形 int

整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

Go 也有基于架构的类型,例如:uint 无符号、int 有符号

每个数字,都是有范围的, 有的数字只能大于0

有的数字可以小于0

在计算机中,所有的东西最终都是存在内存当中的,所以我们不能无限的放置东西(数字)
在这里插入图片描述
在这里插入图片描述

定义整形变量,超过范围会报错,定义的时候不报错,运行的时候报错

package main

import "fmt"

func main() {
    // 定义的时候超过限制是不会报错的,但是在运行时发生了错误 expected 'package', found 'EOF'
    // 计算只能存放固定大小的值。
    // 我们在定义这个类型的时候,系统给了我们一个空间
    var a int = 666666666666666666666663333333333
    fmt.Println(a)

}

在这里插入图片描述

package main

import "fmt"

func main() {
    // 定义的时候超过限制是不会报错的,但是在运行时发生了报错
    // 计算只能存放固定大小的值。
    // 我们在定义这个类型的时候,系统给了我们一个空间
    //var a int64 = 666666666666666666666663333333333
    //fmt.Println(a)
    var i1 int8 //  (-128 到 127)
    i1 = -100
    fmt.Println(i1)

    //i1 = 1000
    //fmt.Println(i1)
    // 由于系统现在空间都很大,默认都使用 int64  int。
    // 二进制的8位  00000000
    // 二进一 01
    // 00000000
    // 0   0
    // 1   1
    // 2   10
    // 3   11
    // 4  100

    // 0~255
    // 00000000 - 11111111

    // int16  0000000000000000 - 1111111111111111
    // int32  00000000000000000000000000000000 - 11111111111111111111111111111111
    // int64



    // >0 无符号数+  有符号数 + -
    // 定义这个变量的时候,空间大小已经被这个数据类型确定了。
    var i2 uint8 // 0 ~ 255
    i2 = 255
    fmt.Println(i2)

}

在这里插入图片描述

浮点型

浮点型用于表示有小数部分的数。Go语言提供了float32和float64两种浮点型,分别占用32位和64位存储空间。
默认情况下,Go语言中的浮点字面量被当作float64类型。

浮点数 float :float32 float64 ,也是一个空间的大小。

package main

import "fmt"

// 浮点数 float ,默认是 float64 ,32
func main() {
    // 浮点数是不精确的,计算机底层导致的 0 1、浮点数、复数,没办法做到精确计算
    var f1 float64
    f1 = 3.16
    var f2 float32
    f2 = 5
    fmt.Println(f1)
    // // 默认的 float 类型,都是保留了6位小数
    // 浮点数的格式化输出 %f ,都是保留了6位小数,保留2位或者3位怎么实现
    // .3 保留3位小数 其余类推
    // 如果小于了当前保留的位数,四舍五入
    fmt.Printf("%T,%.1f\n", f1, f1)
    fmt.Printf("%T,%f", f2, f2)

}

在这里插入图片描述

验证:浮点数计算时不精确的

package main

import "fmt"

func main() {
    // 浮点数 ; 符号位  + 指数位 + 尾数位(存储过程中,可能会丢失,造成精度损失)。
    // float64 的空间 > float32
    var num1 float32 = -123.0000901
    var num2 float64 = -123.0000901
    fmt.Println(num1)
    fmt.Println(num2)
    // 结论:
    // 1、使用float来计算,可能导致数据不精确。
    // 2、float64的精度>float32, go语言中,浮点数默认使用的是float64
}

在这里插入图片描述

特殊的数字类型

byte 就是uint8
rune 就是int32

package main

import "fmt"

// byte
func main() {
    // 别名uint8是byte,十分常用
    // byte = uint8 (0-255之间的整数,我们通常使用byte来定义) uint8
    var num1 byte = 255
    fmt.Println(num1)
    fmt.Printf("%T\n", num1)

    // 不经常用 rune int32
    var num2 rune = 1000000000
    fmt.Println(num2)
    fmt.Printf("%T\n", num2)

    // int、系统大小来的,32位  32、64默认是64
    // 软件跑在32位系统上是不兼容的
    var num3 int = 100000
    fmt.Println(num3)
    fmt.Printf("%T\n", num3)
}

在这里插入图片描述

64位的操作系统是可以兼容32位的、32为不能跑64位的软件。 寻址空间。

字符串类型

字符串就是一串固定长度的字符连接起来的字符序列。 一段中文或者英文 (编码- 字符)

Go语言中,所有的字符串都是由单个 字符 连接起来的。兼容全世界文字的,Go语言默认用的是utf-8编码
UTF-8编码 , 目前兼容我们绝大部分的文字和符号。

GBK编码:中国的编码表,号称兼容所有的中文汉字。

Unicode编码表 :号称兼容了全世界的文字。

编码 中 本质是一个数字

Go语言中,所有的字符串都是由单个 字符 连接起来的
Go语言中,单引号是字符、双引号才是 string 类型
字符本质是整型

package main

import "fmt"

func main() {

    var str string
    str = "Hello,World"
    fmt.Printf("%T,%s\n", str, str)
    // H E L L O , W O R L D
    // Go语言中,所有的字符串都是由单个 字符 连接起来的。
    // 单引号是字符、双引号才是 string 类型
    // 字符本质是整型
    v1 := 'A'
    v2 := "A"
    fmt.Printf("%T,%d\n", v1, v1)
    fmt.Printf("%T,%s\n", v2, v2)

    v3 := '景'
    fmt.Printf("%T,%d\n", v3, v3)
}

在这里插入图片描述

转义字符

常见的转义字符
在这里插入图片描述

package main

import "fmt"

func main() {
    // 特殊的字符 转义字符 \n
    // \n 换行
    fmt.Println("hello\nworld")
    // \b   backspace  删除上一个字符
    fmt.Println("hello\bworld")
    // \t  Tab
    fmt.Println("hello\tworld")
}

在这里插入图片描述

多行输入使用 ``
在这里插入图片描述

多行文本

package main

import "fmt"

func main() {
    // 特殊的字符 转义字符 \n
    // \n 换行
    fmt.Println("hello\nworld")
    // \b   backspace  删除上一个字符
    fmt.Println("hello\bworld")
    // \t  Tab
    fmt.Println("hello\tworld")

    // 转义,就是可以将特殊转义符号或者一些符号打印出来 \

    // ` ` 可以通过它来定义一些长字符串,可以换行输入
    fmt.Println(`\\n
        sadad
        asd
        a
        sd
        asda
        sd
        asda`)
}

在这里插入图片描述

go数据类型转换

在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值

由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明: A = A(B)
布尔类型不支持类型转换

package main

import "fmt"

// 类型转换
func main() {
    // 数据类型转换在Go中就一个格式
    // 新类型的值 = 新类型(旧类型的值)

    // 高位向低位转 (int64  int32  int16)

    // 浮点数转整数,截断,只保留整数部分
    a := 5.9    // float
    b := int(a) // b 就是int类型的a = 5

    fmt.Printf("%T,%.1f\n", a, a)
    fmt.Printf("%T,%d\n", b, b)

    c := 1
    d := float64(c)
    fmt.Printf("%T,%d\n", c, c)
    fmt.Printf("%T,%f\n", d, d)

    // 布尔类型转换,布尔类型 是不支持类型转换的。
    //var flag bool = true
    //f := int(flag)

}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报告 | 中国信通院《大模型落地路线图研究报告(2024年)》(附下载)

前言 近年来,以大模型为代表的新一代人工智能技术加速迭代,向着更为智能化、通用化、普惠化的方向迈进,成为新一轮科技和产业变革的重要驱动力。然而,当前大模型发展仍存在工程实践复杂、技术选型困难、能力评估不全面等问题&…

基于 TDMQ for Apache Pulsar 的跨地域复制实践

导语 自2024年9月6日起,TDMQ Pulsar 版专业集群支持消息、元数据两级跨地域复制功能,消息级复制解决用户全球地域的数据统一归档问题,元数据级复制提供解决用户核心业务跨地域容灾的场景。 用户在跨地域场景遇到的疑问和挑战 在跨地域相关…

FCP-D 报表交付认证考试题

学习目标 帆软 基础知识:通过系统学习,了解帆软BI的基本概念、架构和功能。深入理解报表设计、数据集成和分析等关键模块,为将来的实际应用奠定坚实基础。 报表设计与定制学习如何设计各类报表,包括但不限于表格、图表、仪表盘等。…

springboot luttuc redis 集成protobuf,手动序列化反序列化

前置需知: 1.本文章和网上大部分博客配置不太一样,各位看官要分析一下自己的需求。集成protobuf 本文章主要是手动调用protobuf的序列化方法,而不是交由springboot 去做,会偏向原生java 使用方式 2.由于为了和公司其他的项目达成…

QQueue调用dequeue闪退解决方法

QQueue调用dequeque闪退的解决方法 先看一下Qt帮助文档里面的说明 这个函数假设队列不是空的。 那么我们在调用之前,需要先判断队列是不是空的,如果不是空的,就调用该函数。 if (!queue.isEmpty()) {QString info queue.dequeue(); }这样…

【RabbitMQ 项目】Muduo 库快速上手

Muduo 库快速上手 一.Muduo 库简介二.五个常用类介绍三.结合 Protobuf 定制的应用层协议 一.Muduo 库简介 一句话概括,Muduo 库是基于非阻塞 IO 和事件驱动的 C 高并发 TCP 网络编程库。使用主从 Reactor 模型,使用的线程模型是是 one thread one loop R…

JWT令牌——详解

目录 一、JWT是什么? 二、JWT的组成 三、JWT应用场景 四、生成和校验JWT令牌 五、具体应用 一、JWT是什么? 在当今的Web开发中,安全认证和授权变得尤为重要。JWT(JSON Web Tokens)是一种开放标准(RFC …

大厂中秋福利哪家强?字节发被子,京东联名三星堆!网友:最强的还是我们......

又是一年中秋佳节,大家公司发的中秋福利都拿到手了嘛? 从上周开始,各社交网络平台上就有人陆续晒出了公司发放的中秋礼盒。 其中,财大气粗的互联网大厂的礼盒尤为精致亮眼。 今天,小码就带大家一起来看看大厂那些让人…

在线机房迁移之“玩转TiDB迁移”

作者: 代晓磊_Mars 原文来源: https://tidb.net/blog/02df4029 要想搞定在线机房迁移之TiDB数据库迁移,看完本文基本上所有的迁移方案你都可以搞定了(数据库迁移方案和流程大同小异)。本文给了3种TiDB在线迁移的场景…

四款音频剪辑软件免费使用,你更pick哪一个?

视频剪辑知随着软件的不断更新,入门门槛和操作难度也随之变得越来越低,但是依然有不少人不知道剪辑视频要用什么工具,作为一个视频剪辑爱好者,我尝试过不少编辑软件,今天就来跟大家分享一下四款视频剪辑软件在实际使用…

我与Linux的爱恋:yum和vim以及gcc、gdb、git的使用

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 ​1.Linux软件包管理器yum2.Linux开发工具3.Linux编译器 vimvim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集vim操作总结批量化注释批量化去注释简…

Oracle反向键索引Reverse Key Index

Oracle反向键索引(Reverse Key Index)是一种特殊的B-Tree索引,它在创建索引时对索引列的键值进行字节反转。这种索引的主要设计目的是为了解决在多实例环境(如Oracle RAC)中由于索引键值顺序插入导致的索引块争用问题。…

Vue 3 watchEffect:如何用 onInvalidate 优化副作用处理

在 Vue3 中,watchEffect 是一个用于在响应式数据变化时自动重新执行的函数。它在创建响应式副作用时特别有用,比如在某些数据变化时更新 DOM、发起网络请求或处理复杂的逻辑。 watchEffect 的 onInvalidate 是一个非常重要的功能,用于处理副…

新闻资讯类APP流量变现技巧——提升广告变现收益

新闻资讯类APP拥有庞大的用户基础,始终拥有较强的广告变现能力,如何在激烈的行业竞争中凸显媒体的优势,进而吸引更多的广告主?优化核心场景广告样式的同时,挖掘更多的广告场景样式?如何把握好广告变现和用户…

“Interface 和 Type 区别”深度解析

“Interface 和 Type 区别”深度解析 文章目录 一、Interface 和 Type 是什么二、如何使用 Interface 和 Type1. 定义 Interface2. 定义 Type3. 使用 Interface 和 Type4. 区别与联系 三、Interface 和 Type 二者有哪些区别,分别在哪些场景使用1. 区别2. 场景 四、扩…

将Ruoyi框架系统的Swagger接口文档页面优化为knife4j风格

将Swagger文档原来的页面效果改成比较好看的knife4j风格文档页面 优化前: 请求地址:http://localhost:端口号/swagger-ui/index.html 优化后: 请求地址:http://localhost:端口号/doc.html#/home 修改步骤: 1.引入依…

CPU调度算法之优先级调度

点击下载《CPU调度算法之优先级调度》 摘要 CPU的优先级调度算法是一种通过为不同任务分配优先级来决定执行顺序的调度策略。这种算法使得系统能够优先处理那些被认为更重要或紧急的任务,从而提高整体效率和响应速度。然而,优先级调度也可能带来一些问…

快速求和

请编写程序&#xff0c;输入整数 n&#xff0c;快速计算&#xff1a; 输入格式 n 输出格式 s 要求&#xff1a;输出 6 位小数&#xff0c;末位四舍五入。 代码如下&#xff1a; #include<stdio.h> int main(){int n;double s;scanf("%d",&n);s1.0-1.0/(n1…

DeepACO:用于组合优化的神经增强蚂蚁系统

文章目录 Abstract1 Introduction2 Related work2.1 神经组合优化2.2 蚁群优化3 蚁群优化初探4 Methodology4.1 参数化启发式空间4.2 局部搜索与局部神经引导扰动交织4.3 训练启发式学习器4.4 更好的探索4.4.1 多头解码器4.4.2 Top-k熵损失4.4.3 模仿损失5 实验5.1 实验设置5.2…

DWS=管理员用户创建

管理员用户简介 管理员也称作系统管理员&#xff0c;是指具有SYSADMIN属性的帐户。 非三权分立模式下&#xff0c;拥有系统的最高权限&#xff0c;能够执行所有的操作。系统管理员具有与对象所有者相同的权限。管理员用户创建 su - omm source /opt/huawei/Bigdata/mppdb/.mpp…