1.go的深拷贝与浅拷贝
深拷贝 会赋值全部的内容 内容一样但是地址不一样 修改任何一个后地址不一样 内容也会一样
changeName(h1)对象传到函数里面也是深拷贝
b := a 这是深拷贝 会生成两个内存地址, b:=&a 这是浅拷贝a,b公用a的内存地址,b就是指针类型
2. go的断言
b := <- allchan
a :=b.(Cat) //b为管道的类型是空接口,转换为Cat结构体类型
3. go的闭包
func inc() func() int{
i:=0
fun := func() int{
i++
return i
}
return fun
}
什么是内键函数
goroutine
4.运算优先级
优先级 运算符
7 ^ !
6 * / % << >> & &^
5 + - | ^
4 == != < <= >= >
3 <-
2 &&
1 ||
5.var number *int
number=10
fmt.Println(number)
运行出错
invalid memory address or nil pointer dereference
number是个空指针
6.子类继承父类,子类没有其父类的方法时调用父类的方法
7.fmt.Println(len("中国")) //输出为6
8.defer的用法
9. 调用方法时,会自动对实参进行“取引用”或“解引用”操作 用值类型的实参调用形参为值类型的方法 用指针类型的实参调用形参为值类型的方法(会进行“自动解引用”) 用值类型的实参调用形参为指针类型的方法(会进行“自动取引用”) 用指针类型的实参调用形参为指针类型的方法 规则1: 当传递给方法的实参是一个值类型时,原值的内容不会受到影响,因为传递进来的是原值的副本;相反,当传递给方法的实参是一个指针类型时,原值的内容将可能受到影响。 规则2:方法的调用是否会对原值产生影响完全取决于该方法的形参是值类型还是参数类型。
再就是特殊情况下 当*interface 做形参时
10.switch fallthrough
11.golang中没有隐藏的this指针
方法施加的对象显式传递,没有被隐藏起来
golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
方法施加的对象不需要非得是指针,也不用非得叫this