我正在嘗試編寫一個可以使用的包。這是示例代碼:package redisimport ( "fmt" "github.com/gomodule/redigo/redis" "log" "os")var conn redis.Connfunc init() { // code to set conn variable}func do(command string, args ...interface{}) (interface{}, error) { init() return conn.Do(command, args)}這段代碼無法編譯,編譯器說undefined: init。當(dāng)我更改init()它時Init(),它可以工作,但我不希望它在包之外可用。無論我在哪里讀到這個問題,它都會說從另一個包調(diào)用未導(dǎo)出的函數(shù),但在這里我從同一個包調(diào)用它。此外,Goland IDE 將函數(shù)調(diào)用標(biāo)記為unresolved reference并建議創(chuàng)建它。但是當(dāng)我這樣做時(通過 IDE 本身),它仍然看不到它。
2 回答

德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗 獲得超3個贊
init() 是一個特殊函數(shù)。從語言規(guī)范來看:
函數(shù)初始化() { … }
每個包可以定義多個這樣的函數(shù),甚至在單個源文件中也是如此。在 package 塊中,init 標(biāo)識符只能用于聲明 init 函數(shù),而標(biāo)識符本身并未聲明。因此,不能從程序中的任何地方引用 init 函數(shù)。
用于init()
包級初始化。

縹緲止盈
TA貢獻(xiàn)2041條經(jīng)驗 獲得超4個贊
在 Go 中,init
保留用于初始化需要在包中完成的工作,例如。向某些注冊表添加一些實現(xiàn)。
要解決這個問題,需要使用另一個名稱。
- 2 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報
0/150
提交
取消