golang?run時(shí)報(bào)undefined錯(cuò)誤的解決
golang run時(shí)報(bào)undefined錯(cuò)誤
問(wèn)題描述
在golang中同一個(gè)包中有兩個(gè)文件
分別為main.go 和 a.go,main函數(shù)在main.go中
并且在main函數(shù)中引用了a.go中的一個(gè)結(jié)構(gòu)體
運(yùn)行時(shí)報(bào)錯(cuò)
$ go run main.go
# command-line-arguments
.\main.go:170:10: undefined: TestLinkTask
原因
- go run: 會(huì)先進(jìn)行編譯操作,而在此處的編譯它只會(huì)以這個(gè)main.go為準(zhǔn),導(dǎo)致引用其他文件出現(xiàn)找不到的情況
- go build:不一樣,它會(huì)自動(dòng)查找引用文件并打包
解決辦法
- 方法一:
go run main.go a.go
- 方法二:
go run *.go
- 方法三:
go build
goland:運(yùn)行時(shí)undefined: insertRowDemo報(bào)錯(cuò)

這個(gè)錯(cuò)誤很久之前就遇到過(guò)了,但是當(dāng)時(shí)沒(méi)有解決,這次又讓我碰到了,還是沒(méi)有立刻解決掉,其實(shí)這個(gè)錯(cuò)的原因挺簡(jiǎn)單的。
比如,有兩個(gè)文件在goland同一個(gè)項(xiàng)目中的同一個(gè)main包中,main.go,Demo1.go,main中調(diào)用Demo1.go中的insertRowDemo()


點(diǎn)擊運(yùn)行時(shí)發(fā)生錯(cuò)誤。
報(bào)錯(cuò)說(shuō)沒(méi)有沒(méi)有定義,我勒個(gè)去,編譯器都顯示調(diào)用了,運(yùn)行時(shí)你告訴我沒(méi)定義。
好他么詭異。原因是,配置文件的問(wèn)題,不小心更改了項(xiàng)目的配置文件,在你運(yùn)行時(shí)main方法時(shí),goland會(huì)自動(dòng)給項(xiàng)目加上配置文件,只不過(guò)加入的深淺不一樣,(當(dāng)然可以自己進(jìn)行配置)。
深入到直接對(duì)main.go進(jìn)行配置,導(dǎo)致,運(yùn)行時(shí)只看到自己文件中的函數(shù),看不到main.go外的文件,當(dāng)然在運(yùn)行時(shí)顯示沒(méi)定義了。
解決辦法,把配置文件重新更改到項(xiàng)目深度不要精確到文件。

運(yùn)行項(xiàng)目的時(shí)候,盡量點(diǎn)擊主函數(shù)main()左邊的那個(gè)小綠箭頭進(jìn)行運(yùn)行,或者在main()函數(shù)中右鍵點(diǎn)擊運(yùn)行。
點(diǎn)到函數(shù)的外面,大聰明的goland,就會(huì)自動(dòng)更改你的配置,導(dǎo)致運(yùn)行出錯(cuò)。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
掌握Golang中的select語(yǔ)句實(shí)現(xiàn)并發(fā)編程
Golang中的select語(yǔ)句用于在多個(gè)通道間選擇可讀或可寫的操作,并阻塞等待其中一個(gè)通道進(jìn)行操作??梢杂糜趯?shí)現(xiàn)超時(shí)控制、取消和中斷操作等。同時(shí),select語(yǔ)句支持default分支,用于在沒(méi)有任何通道可操作時(shí)執(zhí)行默認(rèn)操作2023-04-04
Golang 實(shí)現(xiàn)Thrift客戶端連接池方式
golang監(jiān)聽(tīng)ip數(shù)據(jù)包的實(shí)現(xiàn)步驟(golang純享版)
go語(yǔ)言的panic和recover函數(shù)用法實(shí)例
golang接口實(shí)現(xiàn)調(diào)用修改(值接收者指針接收者)場(chǎng)景詳解
Go語(yǔ)言狀態(tài)機(jī)的實(shí)現(xiàn)
go語(yǔ)言中的Carbon庫(kù)時(shí)間處理技巧
Golang實(shí)現(xiàn)多存儲(chǔ)驅(qū)動(dòng)設(shè)計(jì)SDK案例

