1、fmt.Sprintf 各个参数
%d          十进制整数
%x, %o, %b  十六进制,八进制,二进制整数。
%f, %g, %e  浮点数: 3.141593 3.141592653589793 3.141593e+00
%t          布尔:true或false
%c          字符(rune) (Unicode码点)
%s          字符串
%q          带双引号的字符串”abc”或带单引号的字符’c’
%v          变量的自然形式(natural format)
%T          变量的类型
%%          字面上的百分号标志(无操作数)
2、计算时间间隔
start := time.Now()
…
time.Since(start).Seconds()
3、switch的几种小技巧
func Signum(x int) int {
    switch {
    case x > 0:
        return +1
    default:
        return 0
    case x < 0:
        return -1
    }
}
这种形式叫做无tag switch(tagless switch);这和switch true是等价的。可以免去写一大堆if… else if …
如果加上 fallthrough 可以免去写一堆if … if ….
4、关键字和类型以及系统函数
break      default       func     interface   select
case       defer         go       map         struct
chan       else          goto     package     switch
const      fallthrough   if       range       type
continue   for           import   return      var
内建常量: true false iota nil
内建类型: int int8 int16 int32 int64
          uint uint8 uint16 uint32 uint64 uintptr
          float32 float64 complex128 complex64
          bool byte rune string error
内建函数: make len cap new append copy close delete
          complex real imag
          panic recover
5、if 的块级作用域
if f, err := os.Open(fname); err != nil { // compile error: unused: f
    return err
}
f.ReadByte() // compile error: undefined f
f.Close()    // compile error: undefined f
这里会出现编译错误,但是下面的写法是可以的
if f, err := os.Open(fname); err != nil {
    return err
} else {
    // f and err are visible here too
    f.ReadByte()
    f.Close()
}
6、golang 函数返回当有指针类型的时候,需要 new 一下:
func (p RpcServiceImpl) DynamicPrice(q minPrice.QueryMinPrice) (pResp *minPrice.DynamicPriceResp, err error){
    var resp bus.DynamicResp
    pResp = new(minPrice.DynamicPriceResp) //这里一定要new一下
    … …
    return
}
7、初始化make数组的注意点:
list = make([]Alist,0,10) //这个表示申请一个数组,长度为0,容量为10
list = make([]Blist,10)    //这个表示申请一个数组,长度为10,容量为10
那么问题来了,如果你想使用append方式,那么请使用第一种方式申请数组
如果想使用 i 这种下标来赋值数组,那么需要使用第二种方式申请数组