go-类型
任何一门语言都有类型,go也不例外
func main() {
var i int
fmt.Println(i)
fmt.Println(&i)
fmt.Println(*&i)
}
结果:
var name string = "malina"
var i, j, k int
var a, b, c, d = true, 2, 3, "four"
var arr1 []string
var arr2 []string{"a", "b"}
数组
1.var x [10]int 2.x := [10]{1,2,3} 3.x := {...}int{1,2,3}
slice的底层是数组,有三个属性:指针、长度、容量
slice,一个slice类型一般写做[]T,T代表slice中元素的类型
创建slice make([]T, len)1.var x []int x = make([]int, 10) 2.x := make([]int, 10) 3.x := []int{1,2,3} x = append(x, 1)//append可以把元素追加到slice后面
数组和切片很相似:有什么不同呢: 数组: 1. 数组的数据类型是值类型 2. 数组声明时需要指定长度。[size]type{} 3. 数组是固定长度,不可以扩容 4. 数组获取len()、cap()的值是一样的。因为数组是固定长度,长度和容量一致 切片: 1.切片的数据类型是引用类型 2.切片声明时不需要指定长度。[]type{};但是make关键字声明时可以指定切片的长度和容量make([]type, len, size) 3.切片是不定长,可以扩容。切片也被称为变长数组、动态数组 4.切片获取len()、cap()的值不一定一样。因为切片不定长,但是容量可以自动扩容 5.切片其实是指向一个底层数组,操作切片的元素实际是操作数组的元素。如果切片发生扩容,会新建底层数组。
map
agrs := make(map[string]int)
args := map[string]int{"args1":18, "args2":19}
args := map[string]int{}
args["arg1"] = 18
delete(args, "age1")
channel
make(chan 元素类型,缓冲大小)
ch4 := make(chan int)
发送ch<-100
接受<-ch
指针
var v int = 10
ptr := &v
//指针取值
c := *ptr
v代表被取地址的变量,ptr用于接受地址的变量,ptr的类型称做int的指针类型,*代表指针
结构体
type Info struct{
ID int,
Name, hobby string
}
var info Info
info.Name = "malina"
name := &info.Name
fmt.Println(*name)//对成员取地址,通过指针访问
//要在函数内部修改结构体成员,指针传入是必须传的
func updateInfo(i *Info) {
i.Hobby = "旅游"
}
//通过指针创建并初始化一个结构体变量,并返回结构体地址
1.pp := &point{1,2}
2.pp := new (Point)
*pp = Point{1,2}
复合类型是基础类型的组合,包括Array(数组)、Struct(结构体)、Function(函数)、Interface(接口)、Slice(切片)、Map(字典)、Channel(通道)以及Pointer(指针)
随后补充吧
本作品采用《CC 协议》,转载必须注明作者和本文链接