[golang]Go常見問題:# command-line-arguments: ***: undefined: ***


今天遇見一個很蛋疼的問題,不知道是不是我配置的問題,IDE直接run就報錯。

問題描述

在開發代碼過程中,經常會因為邏輯處理而對代碼進行分類,放進不同的文件里面;像這樣,同一個包下的兩個文件,點擊idea的運行按鈕或者運行 go run main.go命令時,就會報錯,如圖所示。

 

 那就好吧,我直接命令運行咯,go run main.go,一樣的結果。

 

IDE的配置,Run _kind:以file模式啟動就報錯,以package包模式就不會報錯。

 

醬紫就不會報錯了

 

 

原因分析

 當然通過命令模式也會發現這樣蛋疼的問題,go build不報錯,直接go run main.go就報錯。

這事你得揪其因呀,出現蛋疼問題就得撫平咯,哈哈哈。

在源代碼的main函數中,我們發現從base.Commands的切片中獲取要執行的命令,然后和傳入的args一起執行cmd.Run(cmd, args)這個方法;

 

 

 

 然后再回過頭看cmd.Run(cmd, args)這個函數,結果發現它只是定義了一種類型,具體實現這里沒有指出;

 

 

緊接着回頭去看run包下的函數,會發現run.go在初始化的時候,會把改文件下的runRun()函數賦值給base.Command{}定義的對象CmdRun,結果會發現runRun函數的的參數類型和個數完全符合cmd.Run(cmd, args)這個函數類型,在go語言中,函數的參數類型和參數個數符合定義的函數類型,則說明改函數實現了定義函數(注:go語言中,函數與方法不同)。 

 

在runRun()函數中,會發現files和cmdArgs接收的是傳過來的文件列表,然后會通過GoFilesPackage(files),然后會入棧、加載、出棧等操作,由於啟動的時候傳遞的只是一個.go文件,並沒有傳遞demo.go,所以系統在加載main.go文件中並沒有找到compose.go 文件中定義的變量,則在

widget.NewToolbarAction(theme.MailComposeIcon(), func() {
newCompose(m.app, m.server).loadUI().Show()
}),

這一行,開始出錯。 

 

正確操作:

該出錯原因屬於go的多文件加載問題,采用go run命令執行的時候,需要把待加載的.go文件都包含到參數里面。通過go run *.go(目錄里面沒有test.go才行)

或者配置IDE以package包模式就不會報錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM