在命令列輸入go run main.go
運行程式時,出現undefined: <Func>
錯誤,<Func>
為main.go
中調用在另一go檔的函式名稱。
原因是go run main.go
只會編譯當下目錄中的main.go
,但同目錄中其他的go檔(調用函式所在的go檔)未一起被編譯所以出現undefined錯誤。
例如專案目錄結構如下,根目錄有main.go
及util.go
。
/
├── go.mod
├── main.go
└── util.go
main.go
package main
import "fmt"
func main() {
r := Plus(1, 2)
fmt.Println(r)
}
util.go
package main
func Plus(x int, y int) int {
return x + y
}
在專案根目錄輸入go run main.go
出現undefined錯誤:
$ go run main.go
# command-line-arguments
./main.go:6:7: undefined: Plus
這是因為go run
後接file arguments檔案名稱則只會對指定的檔案進行編譯。相當於go build main.go
只編譯main.go
而出現同樣的undefined錯誤。
$ go build main.go
# command-line-arguments
./main.go:9:7: undefined: Plus
改成輸入go run .
編譯目錄下的所有go檔並執行。
$ go run .
3
或輸入go run main.go util.go
指定編譯main.go
及util.go
並執行。
$ go run main.go util.go
3
若是將util.go
放到別的package例如util
並修改package名稱並引入到main.go
,則輸入go run main.go
可正常運行。因為Go對引入的外部依賴會自動編譯。
/
├── util/
│ └── util.go
├── go.mod
├── main.go
└── util.go
main.go
package main
import (
"fmt"
"abc.com/demo/util"
)
func main() {
r := util.Plus(1, 2)
fmt.Println(r)
}
util.go
package util
func Plus(x int, y int) int {
return x + y
}
go run main.go
執行結果。
$ go run main.go
3
沒有留言:
張貼留言