代码规范
go import分组应该按照这样的顺序导入:
(1)标准库模块
(2)当前项目模块
(3)第三方模块
每部分按照换行隔开
if err := c.getPodReadyStatus(pod); err == nil {
continue
}
在编程过程中,我们需要关注两点:
(1)return fast
(2)avoid too many depth
- 当设计一个新的包时,新手Go程序员总是先创建一套接口,然后再定义一些满足它们的具体类型。这种方式的结果就是有很多的接口,它们中的每一个仅只有一个实现。不要再这么做了。这种接口是不必要的抽象;它们也有一个运行时损耗。你可以使用导出机制来限制一个类型的方法或一个结构体的字段是否在包外可见。接口只有当有两个或两个以上的具体类型必须以相同的方式进行处理时才需要。
- 类型chan<- int表示一个只发送int的channel,只能发送不能接收。相反,类型<-chan int表示一个只接收int的channel,只能接收不能发送。(箭头<-和关键字chan的相对位置表明了channel的方向。)这种限制将在编译期检测。不能将一个类似chan<- int类型的单向型的channel转换为chan int类型的双向型的channel。
Sort函数
- c++的sort排序和go的sort.Slice排序的区别:
sort(id.begin(),id.end(),[&](int x,int y){
return values[x]>values[y];
});
sort.Slice(ids,func(i,j int) bool {
return values[ids[i]]>values[ids[j]]
})
为什么go需要用return values[ids[i]]>values[ids[j]]而c++只要用return values[x]>values[y];?
c++ sort和go sort的区别。Slice主要是由于他们处理比较函数的方式。在c++中,比较函数接受两个元素作为参数,并返回指示它们顺序的布尔值。在go中,比较函数接受切片的两个索引,并返回一个布尔值,表示这些索引处元素的顺序。这意味着在go中,您需要使用索引访问比较函数中的切片元素,而在c++中,您可以直接比较作为参数传递的元素。根据网络搜索结果,另一个不同之处在于c++排序对大的切片使用快速排序算法,这是不稳定的,这意味着它不会保持相等元素的原始顺序。去排序。Slice使用的是introsort算法,这种算法也不稳定,但是go也提供了排序。函数,它使用稳定的归并排序算法。一个稳定的排序算法维护具有相等键(即值)的记录的相对顺序。