极客时间Golang学习笔记

知识点

  • string类型底层是[]byte

  • 函数所有参数都是值传递

  • 接口实现使用duck type概念
    • 即实现了某接口的所有方法的结构就是该接口类型
    • 因此接口的实现不依赖于接口,可能你冥冥中实现了某个接口,只要不对该接口有显式调用,你就不必知道你这个接口的调用
    • 更倾向于想成为什么接口就要实现什么方法
  • v.(type)断言可以用于swicth类型
1
2
3
4
5
6
7
8
switch t := v.(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
default:
fmt.Println("unknown")
}
  • os.Exit不会调用defer函数且不会输出调用栈

  • 使用recover时应考虑是否为系统出错,防止服务成为僵尸服务

  • 向关闭的通道发送数据会导致panic,从关闭的通道读取数据会读取类型零值,通道由生产者关闭

  • 读写buffer已满通道均会阻塞

  • 格式化字符串可以使用诸如%[1]v 表示使用第一个格式化参数,并格式化为对象取值

  • sync.Pool 对象缓存,会在GC后清除缓存

  • sync.Once 单例模式,能够确保对象只被new一次

  • go test -v -cover输出覆盖率

  • go test -bench=[bench function] -benchmem 性能测试,使用testing.B 测试性能

  • 反射编程

    • 通过字段名称直接获取字段值
    1
    reflect.ValueOf(v).FieldByName("fieldName")
    • 通过标签获取字段值
    1
    2
    field, _ := reflect.TypeOf(v).FieldByName("aFieldName")
    field.Tag.Get("fieldTag")
    • 使用如下方法调用方法函数
    1
    2
    var functionParam interface{}
    reflect.ValueOf(v).MethodByName("aFunc").Call([]reflect.Value{reflect.ValueOf(functionParam)})
  • 不安全编程unsafe

  • Pipe-Filter 架构模式

    • 通过Filter串连架构流程
    • 各个Fielter通过输入输出串连传递数据
  • Micro-Kernal 架构模式

    • 易扩展,通过插件扩展功能
    • 错误隔离,内核只包含通用的处理逻辑,插件的错误不会影响主体逻辑
0%