指针

func (w Wallet) Deposit(amount int) {
    fmt.Println("address of balance in Deposit is", &w.balance)
    w.balance += amount
}

上面的示例,声明一个Deposit方法,接受者是w,如果方法被调用,接受者会被复制返回一个副本,方法体内使用的接受者的副本,所以在方法体内无论如何怎么修改接受者副本的属性,都不会影响到原接受者。

func (w *Wallet) Deposit(amount int) {
    fmt.Println("address of balance in Deposit is", &w.balance)
    w.balance += amount
}

使用*可以拿到接受者的指针(内存地址),从而修改接受者属性

nil

  • 指针可以是 nil
  • 当函数返回一个的指针,你需要确保检查过它是否为 nil,否则你可能会抛出一个执行异常,编译器在这里不能帮到你
  • nil 非常适合描述一个可能丢失的值

错误

  • 错误是在调用函数或方法时表示失败的

  • 通过测试我们得出结论,在错误中检查字符串会导致测试不稳定。因此,我们用一个有意义的值重构了,这样就更容易测试代码,同时对于我们 API 的用户来说也更简单。

  • 错误处理的故事远远还没有结束,你可以做更复杂的事情,这里只是抛砖引玉。后面的部分将介绍更多的策略。