Go语言有丰富的数据类型,出了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。
整型分为两类:无符号、有符号;
其中uint
就是byte
型,int16
就是C语言中short
型,int64
就是long
型。
类型 描述 uint8 无符号 8位整型 (0 到 255) uint16 无符号 16位整型 (0 到 65535) uint32 无符号 32位整型 (0 到 4294967295) uint64 无符号 64位整型 (0 到 18446744073709551615) int8 有符号 8位整型 (-128 到 127) int16 有符号 16位整型 (-32768 到 32767) int32 有符号 32位整型 (-2147483648 到 2147483647) int64 有符号 64位整型 (-9223372036854775808 到 9223372036854775807)
类型 描述 uint 32位操作系统上就是uint32,64位操作系统上就是uint64 int 32位操作系统上就是int32,64位操作系统上就是int64 uintptr 无符号整型,用于存放一个指针
注意:在使用int
和uint
类型时,不能假定它是32位或者64位,而要考虑int
和uint
可能在不同平台上的差异。尤其是跨平台应用需注意。
注意事项:为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int
和uint
。
Go语言中无法直接定义二进制数,关于八进制和十六进制数的示例如下:
package main import "fmt" // 整型 func main() { var i1 = 101 //类型推导,十进制数 fmt.Printf("%d\n", i1) fmt.Printf("%b\n", i1) //把十进制数转换成二进制 fmt.Printf("%o\n", i1) //把十进制数转换成八进制 fmt.Printf("%ox\n", i1) //把十进制数转换成十六进制 //八进制 i2 := 077 //短变量声明 fmt.Printf("%d\n", i2) //十六进制数 i3 := 0x1234567abc fmt.Printf("%d\n", i3) //查看变量类型 fmt.Printf("%T\n", i3) //声明int8类型的变量 i4 := int8(9) //明确指定int8类型,否则为int类型 fmt.Printf("%T\n", i4) }
Go语言支持两种浮点型数:float32
和float64
。打印浮点数时,可以使用fmt
包配合%f
,代码如下:
package main import ( "fmt" "math" ) func main() { f1 := 3.14159 fmt.Printf("%T\n", f1) //默认Go语言中的小数都是float64 f2 := float32(3.14159) //显示声明float32 fmt.Printf("%T\n", f2) //此处f1的值不能赋值给f2,类型不同 fmt.Printf("%f\n", math.Pi) fmt.Printf("%.2f\n", math.Pi) }
输出:
D:\Go\src\github.com\hooo818\studygo\day01\05float>.\05float.exe 3.141593 3.14
complex64
和complex128
复数有实部和虚部,complex64
的实部和虚部都是32位,complex128
的实部和虚部都是64位。
var c1 complex64 c1= 1+ 2i var c2 complex128 c2= 3+ 4i fmt.printf("%T\n", c1) fmt.Printf("%T\n", c2)
Go语言中以bool
类型进行声明布尔类型数据,布尔类型数据只有true(真)
和false(假)
两个值。
import "fmt" func main() { //布尔类型 b1 := true var b2 bool fmt.Printf("%T\n", b1) fmt.Printf("%T value:%v\n", b2, b2) }
输出结果:
bool bool value:false //默认值是false
注意:
false
;Go语言中字符串以原生数据类型出现,使字符串就像使用它的原生数据类型int\bool\float32\float64等
一样。Go语言里面的字符串的内部实现使用utf-8
编码。字符串的值为双引号("...")
中的内容。可以在Go语言的源码中直接添加非ASCII
码,例如:
s1:= "Hello" s2:= "你好"
注意:Go语言中字符串必须使用双引号("")
包裹,Go语言中单引号('')
包裹的字符是字符(单独的字母、汉字、符号表示一个字符
)
s:= "Hello Go 语言" //字符串 c1:= 'h' //字符 c2:= 'l' //字符 c3:= '洪' //字符,一个utf8汉字占3个字节
转义符 含义 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠
例如:
package main import "fmt" //字符串 func main() { //\本来是具有特殊含义的,此时需要转义 path := "\"D:\\Go\\src\\github.com\\hooo818\\studygo\\day01\\08string\"" fmt.Println(path) s := "I'm OK" fmt.Println(s) //多行字符串 s2 := ` 床前明月光 疑是地上霜 ` fmt.Println(s2) }
输出结果为:
"D:\Go\src\github.com\hooo818\studygo\day01\08string" I'm OK 床前明月光 疑是地上霜
Go语言中要定义一个多行字符串时,就必须使用反引号
字符(Esc
键下方那个键);反引号间换行将被作为字符串中的换行,但是所有的转义字符无效,文本将会被原样输出。
方法 介绍 len(str) 求长度 +或fmt.Sprintf 拼接字符串 strings.Split 分割 strings.contains 判断是否包含 strings.HasPrefix,strings.HasSuffix 前缀/后缀判断 strings.Index(),strings.LastIndex() 子串出现的位置 strings.Join(a[]string, sep string) join操作
package main import ( "fmt" "strings" ) //字符串 func main() { //\本来是具有特殊含义的,此时需要转义 path := "\"D:\\Go\\src\\github.com\\hooo818\\studygo\\day01\\08string\"" fmt.Println(path) s := "I'm OK" fmt.Println(s) //多行字符串 s2 := ` 床前明月光 疑是地上霜 ` fmt.Println(s2) //字符串相关操作 fmt.Println(len(s)) //字符串长度 name := "理想" world := "帅" ss := name + world //使用 "+"" 拼接字符串 fmt.Println(ss) ss1 := fmt.Sprintf("%s%s", name, world) //使用fmt.Sprintf()拼接字符串,拼接后返回一个字符串 fmt.Println(ss1) fmt.Printf("%s%s\n", name, world) //仅仅是打印在一起 //分割 ret := strings.Split(path, "\\") fmt.Println(ret) //["D: Go src github.com hooo818 studygo day01 08string"] //判断是否包含 fmt.Println(strings.Contains(ss1, "理想")) //true //前缀、后缀判断 fmt.Println(strings.HasPrefix(ss1, "理想")) //true fmt.Println(strings.HasSuffix(ss1, "帅")) //true //判断字串出现的位置 ss2 := "abcdefb" fmt.Println(strings.Index(ss2, "c")) //2 fmt.Println(strings.Index(ss2, "bc")) //1 fmt.Println(strings.LastIndex(ss2, "b")) //6 //拼接 fmt.Println(strings.Join(ret, "+")) //"D:+Go+src+github.com+hooo818+studygo+day01+08string" }
package main import "fmt" //fmt 占位符 func main() { var n = 100 fmt.Printf("%T\n", n) //查看类型 fmt.Printf("%v\n", n) //查看变量的值 fmt.Printf("%d\n", n) //十进制 fmt.Printf("%b\n", n) //二进制 fmt.Printf("%o\n", n) //八进制 fmt.Printf("%x\n", n) //十六进制 var s = "Let us Go" fmt.Printf("%s\n", s) //字符串 fmt.Printf("%#v\n", s)//会给字符串加上引号 }