最近在看ethereum原始碼,發現在它的blockchain結構體裡面有屬性直接是介面,它有個set函式,用於設定介面的,傳的值為實現這個介面的乙個結構體。下面自己試著寫了乙個小demo:
package main
import (
"fmt"
)type a inte***ce
type b struct
func newb(a a) *b
nb.seta(a)
return nb
}func (b *b) seta(a a)
type c struct
func newc() *c
return c
}func (c *c) nameget() string
func main()
a是乙個介面,b是乙個結構體,有個a介面屬性,它有個方法用於設定a介面,在newb裡面呼叫,c是乙個實現了a裡面介面的結構體,把它的物件傳給newb做引數。這樣我們可以呼叫b.a.nameget()方法。這裡面,我們可以把這個介面函式作為乙個服務程式,開個協程,可以實時或者定時呼叫。以太坊裡面應該就是這個原理,應該是5s去呼叫一次那個介面函式。
Go 結構體 方法 介面
go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。7.1.1 結構體定義 結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的結構...
Go結構體 方法 介面
go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。7.1.1 結構體定義 結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的結構...
Go學習筆記 結構體 方法 介面
go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。7.1.1 結構體定義 結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的結構...