别着急,坐和放宽
指针用来保存变量的地址
允许,返回两个string。
func swap(x,y string) (string, string)
没有异常类型,只有错误类型
Goroutine可以被认为是轻量级的线程。与线程相比,创建Goroutine的开销很小。
利用strings.Builder
rune是int32类型的别称,是Unicode编码的别称。Go语言中字符串的底层表示是byte(8 bit)序列,而不是rune(32 bit)序列。正常情况下中文会使用uft-8编码,每个中文字符需要3byte
fmt.Println(len("Go语言")) //8
fmt.Println(len([]rune("Go语言"))) //4
将字符串转换为[]rune可以进行准确的子串截取
if val, ok := dict["foo"]; ok {
//do something here
}
ok为true代表存在包含key的value
Go不支持默认参数和可选参数
a, b := "A", "B"
a, b = b, a
tag 可以理解为 struct 字段的注解,可以用来定义字段的一个或多个属性。框架/工具可以通过反射获取到某个字段定义的属性,采取相应的处理方式。tag 丰富了代码的语义,增强了灵活性。
reflect.DeepEqual(a, b)判断a、b两个切片是否相等,但是通常不推荐这么做,使用反射非常影响性能。%v 和 %+v 都可以用来打印 struct 的值,区别在于 %v 仅打印各个字段的值,%+v 还会打印各个字段的名称。
使用const和iota来进行
type StuType int32
const (
Type1 StuType = iota
Type2
Type3
Type4
)
struct{} 可以节省内存,一般作为占位符使用,表明这里并不需要一个值。key,value 可以使用 struct{} 作为占位符。如果使用其他类型作为占位符,例如 int,bool,不仅浪费了内存,而且容易引起歧义。信道(channel)控制并发时,我们只是需要一个信号,但并不需要传递值,这个时候,也可以使用 struct{} 代替。