go?build失敗報方法undefined的解決過程
記一次在寫cli腳本的時候,碰到的一個問題。
問題
自己是寫服務(wù)端的,有時候會寫一些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,結(jié)果是有的,也沒有報錯


go build就報錯,原本調(diào)用的方法undefined
但是上一步可以執(zhí)行呀,也有結(jié)果

解決
原因是go語言中main包和其他package是不同的,它定義了一個獨立可執(zhí)行程序,而不是一個庫。一般的包名是.go文件的目錄名,編譯器會將同一目錄下的不同.go文件視作同一個包。但是main包的目錄不是main目錄,所以問題就是在包的引用和定義上,如果想在main包中添加函數(shù)調(diào)用,2個方法:
- 寫在main函數(shù)所在的go文件中;
- 創(chuàng)建另一個package,main函數(shù)去調(diào)用這個包?!窘ㄗ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就可以解決了。
總結(jié)
到此這篇關(guān)于go build失敗報方法undefined的文章就介紹到這了,更多相關(guān)go build失敗報方法undefined內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang HTTP 服務(wù)器 處理 日志/Stream流的操作
這篇文章主要介紹了golang HTTP 服務(wù)器 處理 日志/Stream流的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言實現(xiàn)一個簡單的并發(fā)聊天室的項目實戰(zhàn)
本文主要介紹了Go語言實現(xiàn)一個簡單的并發(fā)聊天室的項目實戰(zhàn),文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Golang使用Gin創(chuàng)建Restful API的實現(xiàn)
本文主要介紹了Golang使用Gin創(chuàng)建Restful API的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
超實用的Golang通道指南之輕松實現(xiàn)并發(fā)編程
Golang?中的通道是一種高效、安全、靈活的并發(fā)機制,用于在并發(fā)環(huán)境下實現(xiàn)數(shù)據(jù)的同步和傳遞。本文主要介紹了如何利用通道輕松實現(xiàn)并發(fā)編程,需要的可以參考一下2023-04-04
Go Grpc Gateway兼容HTTP協(xié)議文檔自動生成網(wǎng)關(guān)
這篇文章主要為大家介紹了Go Grpc Gateway兼容HTTP協(xié)議文檔自動生成網(wǎng)關(guān)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

