Go语言入门指南(下) | 青训营

75 阅读2分钟

本文内容

  • 指针
  • 数组
  • 切片
  • map
  • channel
  • struct

指针

指针也是一个变量,但它是一种特殊的变量,因为它存储的数据不是一个直接的数值,而是另一个变量的内存地址。

注意指针作为函数参数时与变量作为参数的区别

func add (int n) {
    n++
}

func addp (int* n) {
    *n++
}

func main() {
    a := 1
    add(a)
    fmt.Println(a)  // 1
    addp(&a)
    fmt.Println(a)  // 2
}

数组

数组是一组固定长度的数据项,它们具有相同的类型。数组的长度是在声明时指定的,不能更改。

var arr [10]int  //声明一个容量为10的int类型的数组

切片

切片可以看成是动态的数组,声明与数组类似,只不过不用填写它的长度,注意使用切片前要初始化

s := make([]int, 3, 5) // 创建一个长度为3、容量为5的整数切片
s[0] = 1  //给第一个元素赋值
s = append(s, 2)  //追加元素,若长度不够会自动扩容

map

go中map是hash表的引用,map的存储形式是key-value,map的key和value可以是不同的类型,不过key必须是可以比较的,另外和slice一样,使用map前一定要初始化

m := make(map[int]string)
m[1] = "go"
m[2] = "c++"

//看map中key是否存在
v, ok := m[3]
if !ok {
    m[3] = "java"
} 

channel

go中channel常用于goroutine之间的通信,它和slice,map一样属于引用类型,需要初始化

ch := make(chan int)  //无缓冲通道
ch1 := make(chan bool, 3)  //有缓冲通道

//监听系统退出 ctrl+C
sighCh := make(chan os.Signal, 1)
signal.Notify(sighCh, syscall.SIGINI)
<-sighCh
fmt.Println("监听到系统退出")

struct

结构体是一组有序的数据项,每个数据项可以是不同类型的值。类似于c++中的类,能有自己的方法

type People struct {
    name string
    age int
}

func (p People) sleep() {
    fmt.Println("I am going to sleep")
    time.Sleep(5 * time.Second)
    fmt.Println("I am awake")
}

func main() {
    jack := People{"jacke", 18}
    jack.sleep()
}

总结

以上就是go的入门内容了,小编认为学习go跟学任何一门编程语言一样,一定要多敲代码,不然真的一下就忘了