函数的值传递和址传递
在函数中所有的参数都是值传递:但是要注意这个slice.map,channel 等,他们会有传引用的错觉(比如切片,他背后对应的是一个数组,切片本身是一个数据结构,在这个数据结构中包含了指向这个数组的指针byte* array,所以说,即便是在传值的情况下这个结构被复制到函数里了,在通过指针去操作这个数组的值的时候,其实是操作的同一块空间,实际上是结构被复制了,但是结构里包含的指针指向的是同一个数组,所以才有这个错觉 但是如果是对函数进行扩容,切片中的len和cap是没有指针的,扩容操作不会影响到函数外面的切片
for 循环内部的变量也会称为局部变量,所以即便是一个函数内部,我也可以同时定义两个变量a
在局部变量的范围内(for循环体系内部) a就是局部变量,出了for循环,那么a就是大局部变量了
!!!!但是如果我在for循环中写的是a = 0 那么两个a就是同一个a 如果我写的是a := 0 那么相当于是重新定义了 那就是两个a了
在append()和copy部分,在更给切片内容的时候,append(list,[params]),先判断list的cap长度是否大于等于len(list) + len([params]), 如果大于那么cap不变,否则cap的值就会发生修改cap总是会2倍的扩容,当切片的长度大于1024之后,那么就不会是两倍而是1.25倍
在go语言中如果创建了一个结构体b,然后又用另外一个结构体a去嵌套b,如果初始化A的时候,没有给a中的b赋值的话,那么以后调用a.b中的值,会出现空指针异常现象
在go语言中结构体中的变量名首字母如果大写,则默认为public ,如果首字母是小写,则默认为private当要将结构体对象转换为 JSON 时,对象中的属性首字母必须是大写,才能正常转换为 JSON。
我们基于原数组或切片创建一个新的切片后,那么新的切片的大小和容量是多少呢?
这里有一个公式: 对于底层数组容量是 k 的切片slice[ i : j ] 来说,长度是 j - i 容量为:k - i
Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。
在go语言中,假设开了协程,在协程里面抛出一个异常确没有捕获的话,那么也会引起一个主线程的崩溃在Go语言中
go语言中++ -- 这种东西不能前置使用,只能后置使用a++
在go中a++是一个语句,使用要格外小心,比如如果写 if (a++)>0 那么就会报错,因为if后面只能放置一个判断语句。 还有就是 a = a++ 也是不行,
interface本质就是一个指针其实,所以,在定义结构体的时候,b结构体实现了a接口,,如果写的是 b:= &Book{}然后b就可以直接赋值给该接口类型的变量了