从项目学习 Golang (6) - 值方法, 指针方法, Interface 的实现与断言

接入 Gate.io Websocket 公开接口

值方法 vs. 指针方法

值方法和指针方法都是什么呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
type BestOrder struct {
Ask [2]string `json:"ask"`
Bid [2]string `json:"bid"`
}
type OrderBook struct {
Asks [][2]string `json:"asks"`
Bids [][2]string `json:"bids"`
Timestamp int64 `json:"timestamp"`
}
// 值方法
func (ob OrderBook) GetAskBid(level int64) (bestOrder *BestOrder, err error) {
if len(ob.Asks) == 0 || len(ob.Bids) == 0 {
return nil, fmt.Errorf("no best order")
}

bestOrder = &BestOrder{
ob.Asks[0],
ob.Bids[0],
}
return bestOrder, nil
}
// 指针方法
func (ob *OrderBook) Update(time int64) {
ob.Timestamp = time
}
  • 值方法无法对基础类型数据进行修改. 但是数据本书是引用类型则修改有效.
  • 值变量 book1 := OrderBook{} 只能调用值方法, 不能调用指针方法.
  • 指针变量 book2 := &OrderBook{} 即可以调用值方法, 又可以调用指针方法.

Note: 使用 book1 调用指针方法可用的原因是当调用指针方法的时候, 其是 &book1 的简写.

Interface 的实现, 断言

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.