概述
变量的数据类型:
-
基本数据类型:
-
整数型 {
- int: 整形,32位操作系统占4字节,64位操作系统占8字节,
- byte: 等于无符号的int8,
- int8,int16,int32,int64: 8bit整型,16bit整型…(第一位01表示正负,所以int8只有7位表数值,所以数值范围-27~27-1),
- uint8,uint16,uint32,uint64: 无符号8bit整型,无符号16bit整型(所以无符号不涉及正负,所以uint8为0~2^8-1),
- rune: 等于int32
}
-
浮点型 {
- float32: 单精度,
- float64: 双精度,
}
-
字符型: 没有专门的字符型,例如char,varchar,没有!!,使用byte来保存单个字母字符,汉字无法使用byte类型,因为汉字都是3+bytes的
-
布尔型bool: TRUE or FALSE
-
字符串string: Go语言归属string为基本数据类型
-
复数: complex64 complex128 (目前不常用)
-
-
复杂数据类型:
- 指针pointer
- 数组array
- 结构体struct,替代class
- 管道channel
- 函数(也是一种函数类型)
- 切片slice
- 接口interface
- map(类似hashmap,set),比较简单不复杂,相当于别的语言中的map,仅有此。
- 整数的使用细节:
- golang的整数类型分为int和uint,数值的范围不一样。
- 查看某个变量 数据类型和大小:
package main import ( "fmt" "unsafe" ) func main() { /* printf用于做格式化输出, unsafe.Sizeof()函数:用于输出一个变量所占字节大小 */ var i = 100 fmt.Printf("i的数据类型为: %Tn",i) fmt.Printf("i所占用的字节数为:%d",unsafe.Sizeof(i)) }
- 因地制宜为变量赋予核实的数据类型,例如年龄,一般人不会超过255岁,所以var age byte 就可以了,没有必要为age赋一个int64,浪费了很多字节的变量。
也被称作保小不保大原则,如果不确定数量就稍微用大一点,因为现在硬件能力已经不是当前计算机的瓶颈。
- 浮点型的tips:
- 浮点型数据在计算机中存储分三部分:符号位,指数位,尾数位。
- 存储过程中,尾数部分可能丢失,造成精度损失。
- 双精度比单精度更加精确,一般约定俗成浮点数使用float64。
- Golang浮点类型有固定的范围和字段长度,不受OS影响,和int不一样,没有系统默认,只有float32和float64。
- Golang浮点型默认声明为float64。
- float形式一定要有小数点,例如0.123可以写为 num = .123。
- 支持科学计数法: num := 5.1234e(E)2 //其实就是512.34,e(E)X 为 10^X 次方,大小写e不影响科学计数法,X也可以为负数,x^-1即1/x。
- 字符型的tips:
-
没有char和varchar概念,如果是单个字符,则ASCII,使用byte类型来表示所有单个字符,如果很多字符连在一起就是string: var c1 byte = ‘a’。
-
Golang的字符串是由字节组成。
-
如果保存的字符在ASCII表,可以直接使用byte输出,直接输出为码值;使用printf %c输出为准确的ascii字符。
-
如果保存的字符大于255,使用int类型保存,例如查看汉字的码值,可以使用printf %d输出汉字的码值。
-
字符常量需要用’'括起来。
-
Golang中,字符本质是一个整数,直接输出时,是该字符对应的utf-8编码的码值。
-
同理根据第6条,上述可以给某个变量直接赋值一个整数,格式化输出%c,则输出该数字对应的uni-code字符。
-
根据6,7条,则可以判定,字符是可以运算的,通过这种字符码值相加方式,将和格式化输出为%c,则会出现新的uni-code字符。
举例:package main import "fmt" func main() { //Golang里面没有字符类型数据,只能用byte表示,即ASCII代码. //如果单纯输出,则输出为码值,'a'=97,不会输出字符a,而'9'=57 var c1 byte = 'a' var c2 byte = '9' fmt.Println(c1,c2) //如果我们希望正确输出字符,则需要格式化输出 fmt.Printf("c1=%ctc2=%cn",c1,c2) //如果输出汉字,那么byte内的汉字可以输出,而超过255则不可以再使用byte作为数据类型 //var c3 byte = '赵' //fmt.Printf("c3=%c",c3) //上述是行不通的,赵已经超越了byte的最大值溢出了,所以需要int类型 var c3 int = '赵' fmt.Printf("c3=%dn",c3) var c4 int = 10 + 'b' fmt.Printf("c4=%c",c4) //c4的结果为1 }
9.字符型存储到计算机中,需要将字符对应的码值(整数)找出来。
存储: 字符–>找到对应码值–>转换为二进制–>存储
读取: 读取二进制–>对应码值–>转换为字符–>读取
字符和码值都是事先规定好的,不可以修改。
10. Go语言的编码都统一成utf-8,不再涉及gbk,gb2312,不会再出现乱码问题。
布尔型bool的tips:
- 只有两个值:True和False,不可以取什么空值。
- 布尔型占用一个字节,使用unsafe.Sizeof()查看变量大小。
- 主要用于逻辑运算,一般用于流程控制,if,for等。
字符串型string的tips:
- 很多的字符拼接到一起当做字符串,Golang语言字符串是众多字符连接起来的字符序列。
- 使用UTF-8编码表示unicode文本,乱码不再是问题。
- Golang字符串是不可变的。
- 字符串两种表现形式:
双引号:"" 会识别转义字符,例如n就是会换行,不会输出n这种字符串效果
反引号:`` 原生输出所有字符,转义字符失效,类似python中 var1=r’’package main import "fmt" func main() { //创建字符串,打印字符串 var add string = "shit aaa!" fmt.Println(add) //Go中字符串不可变 //var add1 string = "damn!" //add1[0] = 'a' //fmt.Println(add1) //这种切片改变字符串的方式不可以 //字符串两种表现形式 //双引号:"" 会识别转义字符,例如n就是会换行,不会输出n这种字符串效果 //反引号:`` 原生输出所有字符,转义字符失效,类似python中 var1=r'' s1,s2 := "abcnabcn",`abctabc` fmt.Println(s1,s2) //s1是abc换行abc, s2就是abctabc }
- 字符串拼接方式:
一般使用+拼接即可。
多行拼接+一定要留在行尾,再开启下一行,不然会报错.
`
基本数据类型默认值一览:
整型 0
浮点 0
字符串 “”
布尔 falsepackage main import "fmt" func main() { var a int //0 var b int32 //0 var c int64 //0 var d bool //false var e string //"" var f float32 //0 var g float64 //0 fmt.Println(a,b,c,d,e,f,g) //printf中%v表示按照变量值输出 }
最后
以上就是隐形铃铛为你收集整理的Go核心开发学习笔记(三) —— 基本数据类型的全部内容,希望文章能够帮你解决Go核心开发学习笔记(三) —— 基本数据类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复