单位

以函数为单位:《请求与响应》

  • 请求与响应参数的判断

    • 默认响应里面如果错误为nil,那么它的实际值的字段不能是nil吧,最好是初始化为对应的空值
      • slice/map/pointer/chan/
    • 感觉内部没有必要去给他初始化,这个是调用方的责任!!!(除非你是重构者,有义务保证下游的正常)
  • 函数内部的调用第三方的请求与响应结果判断

优雅的判断

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
type Item struct{
    Element *string
}

func (m *Item) GetElement() string {
    if m != nil && m.Element != nil {
        return *m.Element
    }
    return ""
}

防止异常情况,使用这种pb生成的是不是很好?

多使用ok判断

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "fmt"

type YY struct {
	y string
}

func main() {
	var xx interface{}
	xx = nil

	if jj, ok := xx.(*YY); ok {
		fmt.Println("success assert", jj)
	} else {
		fmt.Println("failure assert")
	}

	var jj = xx.(*YY)

	if jj == nil {
		fmt.Println(jj)
	}
}
1
2
3
4
5
6
7
8
failure assert
panic: interface conversion: interface {} is nil, not *main.YY

goroutine 1 [running]:
main.main()
        D:/code/esop/awesomeProject/go-demo/golang_assert/main.go:19 +0x67

Process finished with the exit code 2