解決 "import circle " 錯誤的主要思路:
將迴圈import的部分的依賴於實現(struct)改為依賴於抽象(inte***ce)
這裡提供一種基於handler
(即函式指標)的思路
下面的例子的總體package依賴關係:
main -----> auth , core
auth ---> sdk
core---> sdk
auth/ante.go
package auth
import
("fmt"
"youngqqcn/sdk"
)// 這裡之所以用 datafunc sdk.getdatafunc 而不直接使用 core中的getdata函式
// 或者將getdata在此dowork函式中實現, 是為了:
// 1.解決 core/msgs_test.go "import circle"問題
// 2.根據設計原則, 降低模組間的耦合度, 不應該直接依賴實現, 而是依賴抽象(inte***ce)
func
dowork
( msg sdk.msg, datafunc sdk.getdatafunc )
else
fmt.
println
("do work"
)}
core/msgs.go
package core
import
("fmt"
"youngqqcn/sdk"
)type msgsend struct
func
newmsgsend
(data [
]byte
) msgsend
}func
(msg msgsend)
dosomething1()
func
(msg msgsend)
dosomething2()
func
getdata
(msg sdk.msg)([
]byte
,error
)return
byte
,nil
}
core/msgs_test.go
package core
import
("testing"
"youngqqcn/auth"
)func
testmsgsend_dosomething1
(t *testing.t)
) auth.
dowork
(msg, getdata)
}
sdk/tx_msg.go
package sdk
type msg inte***ce
type getdatafunc func
(msg msg)([
]byte
,error
)
main.go
package main
import
("fmt"
"youngqqcn/auth"
"youngqqcn/core"
package main
)func
main()
) auth.
dowork
(msg, core.getdata)
fmt.
println
("this is main function"
)}
GO語言的package怎麼使用
以python作為對比,在python中如果要使用自己寫的庫,該庫可以在當前或當前子目錄下,假設在當前目錄下,你需要在當前目錄下新建乙個 init py的空檔案,這樣在當前目錄下的工作檔案中可以使用import 匯入自己寫的庫。go的package關鍵字定義該檔案所屬包,然後使用import關鍵字呼...
Go語言中的Package問題
問題一 go使用package組織原始碼的好處是什麼?1.任何原始碼屬於乙個包 2.用包組織便於 的易讀和復用 問題二 go語言中package的種類 go語言中存在兩種包 一種是可執行程式的包 一種是類庫函式的包。可執行程式的包,編譯完成後會生成乙個可執行檔案 靜態庫的包編譯之後會生成乙個.a為字...
解決在IDEA中建立多級package的問題
剛剛才發現在idea建立package時它不會自動分級,比如先建立乙個package 名為com 然後緊接著www.cppcns.com在com下建立www.cppcns.com乙個package 名為 seek 只會出現下圖這樣的情況,沒達到我們想要的分級目的。1.先建立package 名為com...