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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!