极客时间学习整理:
1. go main函数不能直接传参类似于 func main(argc){},main函数的文件名可以不用叫main.go,但是包名,package main 是必须的
2.go 变量声明方式比较多样化,日后会进行统一:var a int ;var a int=1.a:=1
3.数据类型与大多数编程语言一样,但是没有复杂的指针运算,不支持数据类型的隐式转换
4.运算符与大多数的编程语言一样,但是没有--a,++a这种超前计算,
5.循环和判断语句也是类似的,switch case 可以类似于if条件语句,go中遍历关键字只有for循环
6.数组切片,连续存储空间.(_返回值占位,忽略不用的),数组截断,前关后开,切片的内部结构,len,cap,数组的长度以及容量
arr:=[...]int{1,2,3,4,5,6,7,8,9}
arr3 :=arr[:3]
7切片数组的声明方式;切片的len代表了可访问的切片长度,cap代表了容量,都是double方式增长的,len是一一增长的,切片数组只能与nil进行比较,不能像数组一样进行比较是否相等
s1 := make([]int,3,5)
s1 := []int{1,2,3,4,5}
s:=[]int{}
for i:=0;i<10;i++{
s=append(s,1)//每次还要进行对s赋值,是因为内存地址空间是变化的,不在是原来的地址
}
8 map声明:
m :=map[string]int{"one",1,"teo":2}
m:=map[string]int{}
m2 :=make(map[string]int,10)
go中对map中键值是否存在,不能简单的通过返回值判断,需要用:
if v,ok :=m1[3]:ok{
t.log(m1[3])
}else{
t.log("key不存在")
}
遍历map
for k,v :=range mq{
k为map中的key,v是value,对应的值
}
9 string字符串,与其他语言的差别;string 是数据类型,不是引用或者指针类型;string是只读的byte slice,len函数可以包含他包含的byte字节;t.log("%[1]c %[1]d",c),其中1代表把第一个字符格式化输出.
10.函数:go语言中传递的都是值.
11 函数高级用法,可变长参数
func sum(opt ...int)int{
ret :=0
fir _,op:=range ope{
ret+=op
}
return ret
}
defer
func TestDerfer(){
defer Clear()
t.log("start")
panic("err)
}
func Clear(){
fmt.println("clear resources")
}
行为封装:两个不同的点在于第二个是内存拷贝,会存在内存上的消耗
func (e * struct) add()(){}
func (e struct) add()(){}