我正在按照http://golang.org/doc/code.html編寫小應用程序我的目錄樹看起來像-blog -bin -pkg -src -github.com -packages_that_i_imported -myblog -config routes.go server.go我的server.go文件包含以下代碼package mainimport "..." //ommited importsfunc main(){ r:= mux.InitRoutes() //function from imported package Register_routes(r) //function from routes.go}還有我的 routes.gopackage mainfunc Register_routes(r *Router){ r.addRoute("test", "test", "test)}但是在我這樣做之后,我go run server.go 收到了以下錯誤$ go run server.go # command-line-arguments./server.go:10: undefined: Register_routesGOPATH 變量指向我的/blog文件夾我錯過了什么?為什么 go 看不到子目錄中的文件?PS config/routes.go 是 server.go 包的一部分PPS 我已將 routes.go 移動到與 server.go 相同的文件夾,但錯誤仍然存在
1 回答
慕田峪9158850
TA貢獻1794條經驗 獲得超8個贊
為了使用另一個包中定義的函數,首先你必須導入它:
import "myblog/config"
之后你必須通過包名來引用它:
config.Register_routes(r)
此外,包名稱應反映定義它的文件夾名稱。在您的 routes.go 中,包應該是config. 包main是特殊的,main包會被編譯成可執行的二進制文件(它是程序的入口點)。請參閱語言規范中的程序執行。
從您鏈接的頁面:包名稱:
Go 的約定是包名是導入路徑的最后一個元素:導入的包
"crypto/rot13"應該是 namedrot13。可執行命令必須始終使用 package
main。沒有要求包名在鏈接到單個二進制文件的所有包中是唯一的,只要求導入路徑(它們的完整文件名)是唯一的。
查看博客文章包名稱以獲取詳細指南。
請注意,同一包的不同文件必須放在同一文件夾中。并且同一包的不同文件可以使用包中的所有內容,而無需導入它,也無需使用包名稱(與定義在哪個文件中無關)。對于未導出的標識符也是如此。從另一個包中,您只能訪問導出的標識符(它們的名稱必須以大寫字母開頭)。
此外,go 命名約定是使用混合大寫字母而不是下劃線來編寫多詞名稱,請參閱Effective Go / MixedCaps。所以函數應該被命名,RegisterRoutes但這不是必需的。
- 1 回答
- 0 關注
- 211 瀏覽
添加回答
舉報
0/150
提交
取消
