go build失败报方法undefined的解决过程

2022-11-30 36阅读 0评论

?=记一次在写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 build失败报方法undefined的解决过程

go build就报错,原本调用的方法undefined

但是上一步可以执行呀,也有结果

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

总结

到此这篇关于go build失败报方法undefined的文章就介绍到这了,更多相关go build失败报方法undefined内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,36人围观)

还没有评论,来说两句吧...