Golang中的变量学习小结
来源:脚本之家
时间:2023-01-07 12:00:41 362浏览 收藏
来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang中的变量学习小结》,介绍一下变量,希望对大家的知识积累有所帮助,助力实战开发!
Golang里面变量总的来说分四大类型
1. bool,string
bool:指布尔类型,也就是true, false
string: 字符串类型
2. (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
int 和 uint, 其中有u和没有u指的是unsigned指的是有无符号,也就是有无正负号,int类型会根据你操作系统的字数来判断是32位还是64位,如果你的操作系统是64位的,那么在定义int的时候就是64位,也就是你定义int的时候编译器会根据你的操作系统来给这个变量自动分配多大的空间大小。
(u)int8, (u)int16, (u)int32, (u)int64这些后面的8, 16, 32, 64这些是指你定义的变量的大小,8 就是8位,这里的8位指的是二进制中的8位,同理16, 32, 64也是一样的道理,位数越多,变量能便是的范围越大。
uintptr是指针类型,Go语言也是具有指针这一特性的,但是并没有像c语言使用那么的复杂。后会深究这个类型。
3. byte, rune
byte类型你可以看作是uint8的一个别名,byte和uint8表示的范围是一样的,也可以叫做字节类型,byte,最大能表示的范围也就是一个字节的空间大小。
rune是一个新的数据类型,因为你在其他的语言中并没有见过这种类型,相对来说也比较陌生,但是我举个例子你就能完全明白了,在c语言中,有char这个类型,是用来便是一个ASCII字符的,但是是随着编程知识的普及,很多国家的人们都在学习编程,编写程序,但是语言就成为来一大障碍,仅仅用ASCII编码是远远不能满足人们的需求的,故Go语言就是用了Unicode编码,rune也就相当于是在Unicode编码下的字符类型。
rune的长度是32位的,我们都知道unicode是2字节的,但是互联网中很多时候都是使用的UTF-8编码,所以我们rune类型采用了4字节的存储空间,如果后期Go会升级成UTF-8编码提供了可能。
在c语言中,我们都知道char是可以和整型混用的,举个例子:printf("%c",97);输出的是小写字母a。那么rune类型也是可以类似的使用的。
4. float32, float64, complex64, complex128
float32和float64都是浮点数类型,float32大约可以提供小数点后6位的精度,作为对比,float64可以提供小数点后15位的精度。如果想探究浮点数在计算机中的存储形式可以百度一下。
complex64和complex128就是用来表示我们数学中的复数,复数实部和虚部,complex64的实部和虚部都是32位float,complex128的实部和虚部都是64位float。
Golang的变量定义方式
package main import "fmt" var bb uint8 = 12 var xx = 12 var ( cc = 12 q, w = 12, 12 b string = "false" ) func variableZoreValue() { var a int var b string fmt.Println(a, b) } func variableInitialValue() { var a int = 1 n, x := 1, 2 var s string = "abc" fmt.Println(a, s) fmt.Println(n, x) } func main() { variableZoreValue() variableInitialValue() fmt.Println(bb, xx, cc, q, w, b) }
我们定义的变量可以在函数内也可以在函数外,在函数外部定义的变量并不是全局变量,应该是叫做包内变量,因为是在一个包下面。
定义一个变量:
var a int这种定义方式指明了变量的类型,没有初始化,但是我们的编译器会帮你初始化为0
var a int = 16这种方式是相比上一种方式多了初始化。
var a = 12这种方式没有指定类型,但是初始化了一个值12,这种方式编译器会自动的识别是那种类型,就像python里面一样,不需要指定类型。
a := 12这种方式和上一种类似,但是更加方便,不用写前面的var了。
定义多个变量
var bb,cc uint8 = 12, 13这种方式可以定义多个相同类型的变量
var z, str = 14, "string"这种方式比上一种方式更好好用,因为这样可以同时定义多个不同类型的数据了。
n, x := 1, 2这种方式比上一种方式更加方便,不仅可以同时定义多个不同类型的变量同时不用写var关键字了。
complex 复数类型
package main import ( "fmt" "math/cmplx" "math" ) func complexVariable() { c := 3 + 4i fmt.Println("|3 + 4i|=",cmplx.Abs(c)) fmt.Println(cmplx.Pow(math.E, 1i * math.Pi) + 1) fmt.Println(cmplx.Exp(1i * math.Pi) + 1) fmt.Printf("%0.3f", cmplx.Exp(1i * math.Pi) + 1) } func main() { complexVariable() }
c := 3 + 4i,我们在定义复数的时候应该是这种形式而不是:c := 3 + 4*i,如果是这样的形式,则编译器会把这个i当作是变量处理,而不是复数标志
cmplx.Abs(c),取复数的绝对值
cmplx.Pow(math.E, 1i * math.Pi) + 1,计算e^(iπ)+1,e是数学中的自然数。
cmplx.Exp(1i * math.Pi) + 1,另外一种计算方式
fmt.Printf("%0.3f", cmplx.Exp(1i * math.Pi) + 1)格式化输出复数。
常量的定义
package main import ( "fmt" "math" ) c consts() { var filename = "1.txt" const a, b = 3, 4 var c int = 0 c = int(math.Sqrt((a*a + b*b))) fmt.Println(filename, c) } func main() { consts() }
Go语言中的常量是和c语言中的宏常量是一样的,本着替换的原则,所以如果在定义常量的时候编译器不用指定类型,所以在c = int(math.Sqrt((a*a + b*b)))中就不用把(a*a + b*b)强转为float64。
在定义变量的规则中对常量也是适用的,我就不多讲了,自己去实践下就知道了。
定义枚举类型
在Go语言中并没有针对枚举类型的关键字的,那Go语言是怎么定义枚举类型的呢?
package main import "fmt" func enums() { const( c = 0 cpp = 1 java = 2 python = 3 ) fmt.Println(c, cpp, java, python) } func main() { enums() }
这样我们便定义了一个枚举同时还可以使用iota关键字,表示这个枚举类型是递增的
package main import "fmt" func enums() { const( c = iota cpp java python ) fmt.Println(c, cpp, java, python) } func main() { enums() }
更高级的定义方法:
// 定义b kb mb gb tb pb const( b = 1iot想得到与从0开始的给自增值,你要我们写写出表达式再复杂的枚举类型都可以使用这样的方式来定义常量。
总结
在Go语言的变量常量定义中,变量的类型标识是写的变量名的后边,编译器可以自动推测你需要定义变量的类型的,前提是你要初始化变量,没有char只有rune,原生态的支持复数这种类型。
好了,本文到此结束,带大家了解了《Golang中的变量学习小结》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!
-
125 收藏
-
328 收藏
-
451 收藏
-
411 收藏
-
436 收藏
-
233 收藏
-
322 收藏
-
181 收藏
-
316 收藏
-
244 收藏
-
300 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 灵巧的故事
- 太详细了,码起来,感谢大佬的这篇博文,我会继续支持!
- 2023-01-30 00:11:31
-
- 坚定的美女
- 这篇技术贴真是及时雨啊,up主加油!
- 2023-01-25 04:27:57
-
- 饱满的诺言
- 这篇文章真是及时雨啊,太细致了,感谢大佬分享,已加入收藏夹了,关注作者了!希望作者能多写Golang相关的文章。
- 2023-01-21 10:46:43
-
- 孝顺的红牛
- 这篇技术文章真及时,太详细了,赞 👍👍,收藏了,关注博主了!希望博主能多写Golang相关的文章。
- 2023-01-20 06:03:01
-
- 幽默的羊
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢大佬分享技术贴!
- 2023-01-12 13:35:02