go学习笔记和一些语法糖
… 的用法
可变参数
1  | func a(args ...int) int {  | 
打散slice
1  | func a() {  | 
go中的继承
先看一段代码
1  | type (  | 
可以看到上面Engine中包含了*RouterGroup这一匿名字段,Engine 结构体将直接继承 RouterGroup 中的所有字段和方法,并且不需要使用 .prefix、.middlewares、.parent 等字段来引用 RouterGroup 中的属性和方法,而可以直接使用 Engine 实例进行访问。
go tag
tag 是一种结构化的注释方式,它可以用于给结构体字段添加元数据,例如字段的名称、类型、格式、验证规则等信息。
示例如下
1  | type Person struct {  | 
可以最终通过反射拿到tag的k-v信息
1  | package main  | 
cap和len
cap 和 len 都是内置函数,用于获取切片、数组、map 和 channel 的长度和容量信息。
slice作为一个array的引用其cap和len并不一定相等,slice的容量可以动态扩展,如果在使用 append 函数将元素添加到切片时长度超过了当前容量,Go 会动态分配一块更大的内存作为底层数组,并将原有数据复制到新的内存空间中,完成切片的扩容过程。如果切片的长度没有超过容量,则不会进行扩容。这个过程会导致切片的地址发生变化。可以通过对比改变前后切片的地址来判断是否扩容。
any
在go1.18之后添加的新关键字 all: rewrite interface{} to any #49884
等同于之前的interface{}
1  | type any interface{}  | 
用法
1  | func a(v any) {  |