mindmap
数据类型
基本数据类型
布尔型
数值型
整型
浮点型
字符串
派生数据类型
数组
切片
map
函数
结构体
指针
接口
channel
整型
无符号整型:uint8(byte),uint16,uint32,uint64 有符号整型:int8,int16,int32,int64
| 类型 | 范围 |
|---|---|
| uint8 | 0 到 255 |
| uint16 | 0 到 65535 |
| uint32 | 0 到 4294967295 |
| uint64 | 0 到 18446744073709551615 |
| int8 | -128 到 127 |
| int16 | -32768 到 32767 |
| int32 | -2147483648 到 2147483647 |
| int64 | -9223372036854775808 到 9223372036854775807 |
| uint在32位系统上为uint32,在64位系统上为uint64 |
int在32位系统上为int32,在64位系统上为int64
在一些情况下不能使用int和uint声明,必须确定位数,避免收到设备的影响
进制转换
占位符
二进制 %b
十进制 %d
十六进制 %x
八进制 %o
表示
八进制数字以0开头,例:015
十六进制数字以0x开头,例:0xabc
浮点型
float32和float64 他们的最大值分别可以用math.MaxFloat32, math.MaxFloat64表示
fmt.Println(math.MaxFloat32, math.MaxFloat64)
// 3.4028234663852886e+38 1.7976931348623157e+308
占位符:%f %m.nf:m表示至少占m个字符宽度(数据不足时前面用空格补齐,-m后面用空格补齐)
n表示小数点后位数
//浮点型占位符
var num1 = 3.1415
fmt.Printf("%f\n", num1) //3.141500
fmt.Printf("%.2f\n", num1) //3.14
fmt.Printf("%1.2f\n", num1) //3.14
fmt.Printf("%3.2f\n", num1) //3.14
fmt.Printf("%5.2f\n", num1) // 3.14
fmt.Printf("%6.2f\n", num1) // 3.14
注意:
复数
complex64和complex128
complex64实部和虚部各32位
complex128虚部各64
//复数
var num2, num3 = 1 + 2i, 3 + 4i
fmt.Println(num2, num3)
// (1+2i) (3+4i)
布尔型
bool
值为true或false,默认为false
真假不可以用数字表示
字符串 string
- 字符串用""
- 还可以使用
str := `12
123
123
`
此时,字符串按定义时的格式打印,且转移字符这种情况下不起作用
转义字符
表示改变原来的含义,在字符串中转义字符算一个字符,不管(\ + 字符)是否有具体含义,都表示一个字符
例如:\n,\t,',",\
\n 换行,光标跳到到下一行
\t 制表符,自动补齐
\' 就表示 '
\" 表示 " ,避免在打印的时候产生影响
\\ 打印 \ ,在打印地址的时候多用
byte和rune
Go语言中字符有两种:
byte:uint8,用来表示ASCII码包含的字符
rune:UTF-8字符,中文、韩文……
-----------------------------------------------------------------------------------
ASCII码中的字符只占用一个字节,但是UTF-8中汉字占3-4个字节,带汉字的字符串不适合用len()遍历,可以用for range遍历
// 字符串遍历
var str string = "hello 世界"
for i := 0; i < len(str); i++ {
fmt.Printf("%c", str[i])
}
//hello ä¸ç
fmt.Println()
for _, v := range str {
fmt.Printf("%c", v)
}
//hello 世界
类型转换
Go语言中只有强制类型转换,没有隐式类型转换。且只能在两个类型之间支持相互转换的时候使用。
标识符和关键字
标识符
程序员自己定义的具有特殊意义的,例如变量名、常量名、函数名、包名……
组成:由数字、字母、_(下划线)组成,不能以数字开头,标识符不可以是关键字
注意:标识符区分大小写
关键字
Go语言中预先定义好的
Go语言中的关键字:
break default func interface select
chan case const continue defer
go map struct switch if
else goto package fallthrough var
return import type range for
Go语言中的保留字:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64
complex64 complex128
bool byte rune string error make len cap
new append copy close delete panic
recover true false iota nil
关键字和保留字都不可以用来做标识符
变量
方便在内存上访问数据
变量类型
每一个变量都有自己的变量类型,比如整型、浮点型、布尔型……
变量的声明
变量在使用之前都必须要声明,且声明变量后必须使用,不然会报错
格式:var 变量名 变量类型
变量类型必须写
// 变量的声明
var name string
若要一次声明多个变量
var (
name string
age int
)
变量的初始化
声明时进行初始化
var name (string) = "张三"
这时变量类型可以不写,编译器会根据值判断变量类型
短变量声明声明时进行初始化
name := "张三"
注意:只能在函数内使用
若声明时没有给出初始值,则go语言会自动初始化
整型和浮点型默认初始化为0
字符型默认初始化为空字符( )
布尔型默认初始化为false
切片、指针、map……默认初始化为nil
匿名变量
某变量需要接收但不需要使用时可以用_
var arr = [...]int{1,2,3,4,5}
for _,v := range arr {
}
常量
值恒定不变
格式:const 变量名 变量类型 = 值
注意:常量在定义时必须赋值 多个常量一起声明
const (
num1 = 1
num2 = 2
num3 = 3
)
若下面的常量忽略了值,则忽略了的值与上面一行一样
const (
num1 = 1
num2
num3
)
const (
num1 = 1
num2 = 1
num3 = 1
)
上面两种写法结果一致
iota
iota是常量计数器,只能在常来那个表达式中使用 计数规则:const出现时iota重置为0 const中每新增一行常量声明iota计数一次
几种情况
情况一
const (
num1 = iota //0
num2 //1
num3 //2
num4 //3
)
情况二
const (
num1 = iota //0
_
num3 //2
num4 //3
)
情况三
const (
num1 = iota //0
num2 = 100 //100
num3 //2
num4 //3
)
情况四
const (
num1,num2 = iota,iota //0 0
num3,num4 //1 1
)
情况五
const (
_ = iota
KB = 1 << (iota * 10) // 10000000000 1024
MB = 1 << (iota * 10) // 10000000000 0000000000 1024 * 1024
GB = 1 << (iota * 10) // .... 1024*1024*1024
TB = 1 << (iota * 10) // .... 1024*1024*1024*1024
)