日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

go?build失敗報方法undefined的解決過程_Golang

作者:非曉為驍 ? 更新時間: 2022-12-27 編程語言

記一次在寫cli腳本的時候,碰到的一個問題。

問題

自己是寫服務端的,有時候會寫一些cli腳本去跑測試。習慣main.go寫主流程,其他子文件寫方法,這樣子代碼不會都在main.go里面。但這么寫直接GoLand點擊main旁邊的按鈕是可以執行,一旦用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,結果是有的,也沒有報錯

go build就報錯,原本調用的方法undefined

但是上一步可以執行呀,也有結果

解決

原因是go語言中main包和其他package是不同的,它定義了一個獨立可執行程序,而不是一個庫。一般的包名是.go文件的目錄名,編譯器會將同一目錄下的不同.go文件視作同一個包。但是main包的目錄不是main目錄,所以問題就是在包的引用和定義上,如果想在main包中添加函數調用,2個方法:

  • 寫在main函數所在的go文件中;
  • 創建另一個package,main函數去調用這個包。【建議】

修改后代碼

// 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就可以解決了。

總結

原文鏈接:https://blog.csdn.net/weixin_40242845/article/details/126934100

欄目分類
最近更新