go?build失敗報方法undefined的解決過程
記一次在寫cli腳本的時候,碰到的一個問題。
問題
自己是寫服務端的,有時候會寫一些cli腳本去跑測試。習慣main.go寫主流程,其他子文件寫方法,這樣子代碼不會都在main.go里面。但這么寫直接GoLand點擊main旁邊的按鈕是可以執(zhí)行,一旦用go build就報某個引用的方法,undefined。
范例代碼
//main.go package main import "fmt" func main() { fmt.Println("add result : ", Add(1, 2)) fmt.Println("multi result : ", Multi(1, 2)) }
//operation.go package main func Add(a, b int) int { return a + b } func Multi(a, b int) int { return a * b }
注意這是兩個文件,不是都在main.go里面,package都是main。這兩個文件,都在同一個目錄下面。
操作
直接點擊run,結果是有的,也沒有報錯
go build就報錯,原本調用的方法undefined
但是上一步可以執(zhí)行呀,也有結果
解決
原因是go語言中main包和其他package是不同的,它定義了一個獨立可執(zhí)行程序,而不是一個庫。一般的包名是.go文件的目錄名,編譯器會將同一目錄下的不同.go文件視作同一個包。但是main包的目錄不是main目錄,所以問題就是在包的引用和定義上,如果想在main包中添加函數調用,2個方法:
- 寫在main函數所在的go文件中;
- 創(chuàng)建另一個package,main函數去調用這個包?!窘ㄗh】
修改后代碼
// main.go package main import ( "fmt" "train/package/operation" ) func main() { fmt.Println("add result : ", operation.Add(1, 2)) fmt.Println("multi result : ", operation.Multi(1, 2)) }
operation.go放到一個單獨的包
// operation.go package operation func Add(a, b int) int { return a + b } func Multi(a, b int) int { return a * b }
此時再go build就可以解決了。
總結
到此這篇關于go build失敗報方法undefined的文章就介紹到這了,更多相關go build失敗報方法undefined內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
GoLang并發(fā)編程中條件變量sync.Cond的使用
Go標準庫提供Cond原語的目的是,為等待/通知場景下的并發(fā)問題提供支持,本文主要介紹了Go并發(fā)編程sync.Cond的具體使用,具有一定的參考價值,感興趣的可以了解一下2023-01-01golang struct 實現(xiàn) interface的方法
這篇文章主要介紹了golang struct 實現(xiàn) interface的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07