golang总结

1.golang默认采用值传递,如果希望修改值可以通过指针、引用进行传递例如func(&arg) 注意golang中没有c++中引用参数的函数声明,需要用指针
golang中的slice、map、interface、channel类型默认使用引用传递
2.数组声明 可以使用 var arr2 [10]int;可以使用var arr1 = new([5]int);arr2是[5]int类型,arr1是*[5]int类型
可以通过 arr3 := […]int {1, 2, 3}自动推断长度;可以自己指定 arr4 := [4]int {1, 2, 3, 4};其中arr3就变成了切片了。
传递数组到函数会造成拷贝,可以通过传递数组的指针、数组的切片来避免拷贝。
切片是对数组一个连续片段的引用,是一个引用类型,和数组不同,在运行过程中可以调整长度(可以通过apend函数实现)。多个切片如果标识同一个数组片段,它们可以共享数据。
声明方式 var xxx []type,未初始化时默认为Nil,长度为0;可以通过make创建一个切片
xxx := make([]type, len)
切片在垃圾回收上,只有当底层数组的引用为0才会释放,因此如果有一个很小的切片会导致一个很大的数组不被释放
3.new和make区别 都是在堆上分配内存。new(T)是为T分配一片内存,初始化为0并且返回*T的内存地址。
make只用于三种类型 切片、map、channle
4.map 声明 var mymap map[type]type
maplist = map[string]int{“one”:1, “two”:2}
mymap = maplist
mapCreate := make(map[string]int)
5.结构体方法 可以使用指针或者值作为接收者,一般应为性能会使用指针方式,如果不想改变接收者的值可以使用值传递
另外如果接收者本身是map、func、chan 需要使用值传递,因为其本身就是引用类型
func (xxx T) funcA() {}
func (xxx *T) funcA() {}
6. golang中多继承可以通过包含父类结构体来实现
type CameraPhone struct {
Camera
Phone
}
7.golang可以通过interface实现面向对象中的多态;一个结构体只要实现了interface中声明的方法则认为实现了对应的接口。一个类可以实现多个接口。
可以通过Interface.(type)来查看实现接口的真实类型

switch t := areaIntf.(tpye) {
case *Square:
xxx
case *Circle:
xxx
default:
xxx
}

可以测试一个类是否实现了某个接口

type Stringer interface {
	String() string
}
if sv, ok := v.(Stringer); ok {
		fmt.Println("v实现了Stringer接口")
}

任何类型都实现了空接口,可以定义参数为空接口 在函数体里判断参数类型
8.可以通过reflect来判断类型,获取value,调用value对应类型的方法
9.golang包初始化顺序与包引用顺序有关,A–>B–>C,A引用了 B,B引用了C,那么先初始化C,再初始化B,再初始化A。通过保留函数Init做
10.golang坑 https://studygolang.com/articles/11990
11.golang hash算法 https://my.oschina.net/ifraincoat/blog/604415

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值