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) { |