Go股大全:

  1. flag库了解吗?有什么陷阱?

flag是Go官方提供的标准库,flag包实现了命令行的解析,flag使得开发命令行工具更为简单;

陷阱一:

当我们把flag放置在cli应用的最后面时,需要小心参数传递的顺序,flag包的命令行参数的解析逻辑是:当碰到第一个非flag参数时,便停止解析,所以如果传入非法参数就导致后面的参数解析错误:

陷阱二:

对于bool类型的flag参数,只支持以下两种形式:

-arg

-arg=value

其他形式都会导致解析失败;

  1. Go语言中的nil是什么:

nil不是关键字,是一个预先声明的标识符,指针,通道,函数,接口,map,切片的零值就是nil.

nil是没有默认类型的,他的类型具有不确定性,我们在使用它时必须要提供足够的信息能够让编译器推断nil期望的类型;

两个nil不能进行比较,因为nil是无类型的;

  1. 声明一个nil的map,map可以读数据,但是不能写数据
  2. 关闭一个nil的channel回引发panic
  3. nil切片不能进行索引访问,会引发panic
  4. 方法接受者为nil时,如果在方法内使用到了会引发panic
  5. 空指针一个没有任何值的指针
  6. context了解吗?

context包是在1.7版本引入的,context可以用在goroutine之间传递上下文信息,相同的context可以传递给运行在不同goroutine中的函数,上下文对于多个goroutine同时使用是安全的,context官方建议被当作第一个参数,并且不断透传下去,context可以使用background,TODO创建一个上下文,在函数调用链之间传播context,也可以使用withDeadline,withCancel或withValue创建的修改副本替换他,总结:context的作用就是在不同的goroutine之间同步请求特定数据,取消信号以及处理请求的截至日期.

我们常用的一些库都支持context,例如gin,database/sql等库都是支持context的,这样更方便我们做并发控制