go?build失敗報(bào)方法undefined的解決過程
記一次在寫cli腳本的時(shí)候,碰到的一個(gè)問題。
問題
自己是寫服務(wù)端的,有時(shí)候會(huì)寫一些cli腳本去跑測(cè)試。習(xí)慣main.go寫主流程,其他子文件寫方法,這樣子代碼不會(huì)都在main.go里面。但這么寫直接GoLand點(diǎn)擊main旁邊的按鈕是可以執(zhí)行,一旦用go build就報(bào)某個(gè)引用的方法,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
}
注意這是兩個(gè)文件,不是都在main.go里面,package都是main。這兩個(gè)文件,都在同一個(gè)目錄下面。
操作
直接點(diǎn)擊run,結(jié)果是有的,也沒有報(bào)錯(cuò)


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

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

