作為一種底層技術,區塊鏈技術由最初的數字貨幣到智能合約再到如今各行業情境分布式落定應用的實現,自2008年提出至今的10年間,區塊鏈從最初的理論構想到如今的實際情境應用落地,雖質疑重重但卻一直努力前行。尤其是近兩年內,區塊鏈對於現有行業邏輯的重新構建讓它無可爭議地成為下一個發展的風口。
兄弟連教育Go語言+區塊鏈培訓學院是由兄弟連教育攜手微軟區塊鏈領域全球最具價值專家尹成及其帶領的清華水木未名教學團隊所組成,學習周期為五個半月,內容涵蓋Go語言、區塊鏈密碼學、分布式編程、共識演算法、公鏈開發、以-太=坊與智能合約與DAPP開發、區塊鏈系統架構開發超級賬本與區塊鏈3.0EOS等內容。
一,組合
golang 中一切 皆是類型
這個和 物件導向的 概念有點像 ,但是又不太像,和javascript倒是有些相似之處
那麼如何? 像 Java中的 繼承呢,golang使用的是組合
請看代碼 和 運行輸出 說明一切
type father struct {
name string
sex int
}
type sun struct {
father
name string
}
func main() {
s:=sun{father:father{name:"father",sex:11},name:"sun"}
fmt.Println(s)
fmt.Println("name",s.name)
fmt.Println("name",s.father.name)
fmt.Println("sex",s.sex)
fmt.Println("sex",s.father.sex)
}
=======================================
{{father 11} sun}
name sun
name father
sex 11
sex 11
===================================
father的sex屬性就被組合進了sun ,成為了sun的屬性,雖然我的 命名是 father和 sun但 二者不是繼承 是組合的關係
當father的屬性 和 sun的屬性同名,被組合者 即母體 sun優先,想要 訪問 father的name需要 s.father.name
二 .介面
//介面中可以組合其它介面,這種方式等效於在介面中添加其它介面的方法
type Reader interface {
read()
}
type Writer interface {
write()
}
//定義上述兩個介面的實作類別
type MyReadWrite struct{}
func (mrw *MyReadWrite) read() {
fmt.Println("MyReadWrite...read")
}
func (mrw *MyReadWrite) write() {
fmt.Println("MyReadWrite...write")
}
//定義一個介面,組合了上述兩個介面
type ReadWriter interface {
Reader
Writer
}
//上述介面等價於:
type ReadWriterV2 interface {
read()
write()
}
//ReadWriter和ReadWriterV2兩個介面是等效的,因此可以相互賦值
func interfaceTest0104() {
mrw := &MyReadWrite{}
//mrw對象實現了read()方法和write()方法,因此可以賦值給ReadWriter和ReadWriterV2
var rw1 ReadWriter = mrw
rw1.read()
rw1.write()
fmt.Println("------")
var rw2 ReadWriterV2 = mrw
rw2.read()
rw2.write()
//同時,ReadWriter和ReadWriterV2兩個介面對象可以相互賦值
rw1 = rw2
rw2 = rw1
}
三.介面和組合
1.由於結構struct實現了介面的所有方法,所以可以將struct賦值給相應的介面
2.在 struct2中已經實現了對介面的所有的方法的實現
3.而struct1 如果組合的struct2了,那麼struct1也就實現了介面的所有方法的實現,所以可以將struct1賦值給介面