解決go中package依賴的一種思路 函式指標

2021-10-11 03:21:58 字數 1885 閱讀 4878

解決 "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...