Go 支持的基本类型:
- bool
- string
- 数字类型
- int8, int16, int32, int64, int
- uint8, uint16, uint32, uint64, uint
- float32, float64
- complex64, complex128
- byte
- rune
int: 在32位系统中,4个字节,在64位系统中, 8个字节
byte 是 uint8 的别名。
rune 是 int32 的别名。
- byte 等同于uint8,常用来处理ascii字符,一个byte可以表示一个0-255之间的十进制数,两个十六进制数,一个十六进制需要4位表示
- rune 等同于int32, 常用来处理unicode或utf-8字符,通常使用utf8.RuneCountInString(“中国”)来统计中文字符串长度等;
- uintptr: 存储指针的uint
- array: go中,长度是数组定义的一部分,例如:array := [3]string{}定义了一个长度为3的字符串数组变量,数组是不可变类型,长度一经定义不可动态扩容
- slice:
var s []string // 声明一个空切片,可直接使用append()方法进行添加元素
s := make([]string, 0)
s := make([]string, 5, 5)// 不可取
s := []string{"a", "b"}
- map:
var m map[string]int //声明一个map变量,注意:声明后不可直接使用,如果要使用注意make初始化
m := make(map[string]int, 0)
m := map[string]int{
"a":1,
"b":2,
}
- channel:
var chan1 chan int //申明了一个没有缓存的双向管道「双向:可写入 可读取」,同样使用时需要进行初始化,nil通道阻塞
chan1 := make(chan int, 2) //初始化了一个容量为2的信道,chan1是这个信道的引用
chan1 := make(chan<- int, 2) //初始化了一个容量为2的只可写入的单项信道
使用close()关闭chan
规则:
1 向一个已经关闭的chan发送数据,引发panic;
2 从已经关闭的chan接收数据,返回已缓冲的数据或是零值
3 无论收发数据,nil通道都会阻塞
- struct:
type People struct {
Sex int
}
type Student struct {
People
Name string
}
s := Student{
Name: "a",
People: People{
Sex: 1,
},
}
fmt.Println(s.Sex)
- function:
在golang中,function是头等公民,零值nil
var f func()
var f func(param string)
var f func(param string) error
var f func(param string) func() error
- interface:
func main() {
var i interface{}
}
type Man interface {
Eat(food string) error
Sleep(time time.Duration) error
}