switch
switch 注意事项
- fallthrough 不能用在 switch 的最后一个分支。
Golang 的 Struct 结构体(源于 C 语言,但又有别于 C)的灵活性:
go 语言中并没有像 C++,Java 语言中这类的 Class,它只含有像 C 语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是 go 的面向对象,包括 go 语言中的 map 等操作都是借助了结构体。其实,说白了,C++、Java 等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。很多人刚接触面向对象很不理解这些东西也应该缘于此。
1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。
2.如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重新分配内存给 slice,使用值类型。
3.如果接受者是一个小的数组或者原生的值类型结构体类型(比如 time.Time 类型),而且没有可修改的字段和指针,又或者接受者是一个简单地基本类型像是 int 和 string,使用值类型就好了。
基准测试结果的数值分析的一般原则建议:
当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情况下我们就需要用到指针了。对应到我们这里用来更新接收器的对象的方法,当这个接受者变量本身比较大时,我们就可以用其指针而不是对象来声明方法,如下: