本文内容
- 指针
- 数组
- 切片
- 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跟学任何一门编程语言一样,一定要多敲代码,不然真的一下就忘了