网络编程
位置:首页>> 网络编程>> Go语言>> go build失败报方法undefined的解决过程

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

作者:非晓为骁  发布时间:2023-06-18 15:07:36 

标签:go,build报错,undefined

记一次在写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就可以解决了。

来源:https://blog.csdn.net/weixin_40242845/article/details/126934100

0
投稿

猜你喜欢

  • 一.权限表mysql数据库中的3个权限表:user 、db、 host权限表的存取过程是:1)先从user表中的host、 user、 pa
  • 代码如下:USE TestDB declare @conversation uniqueidentifier while exists (s
  • 第一列按照goodsid局部分组,然后在分组后的记录中按照audittime升序排序得到序号,从而显示某商品得第几次变迁。 第二列是取该商品
  • 功能: 1、 允许/限制对表的修改 2、 自动生成派生列,比如自增字段 3、 强制数据一致性 4、 提供审计和日志记录 5、 防止无效的事务
  • 高层的期望“3个月内,我希望网站能增加X注册用户,每日的独立IP到Y,网站盈利达到Z……”作为一个团队的领袖或者产品负责人,这样的期望是根据
  • 平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。1、当需要向表中装载大量的数据流或者需要处理大
  • 存储过程的优缺点: 存储过程优点: 1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProce
  • 先按照下面的表结构创建mysql_order_by_test数据表,我们用实例一点一点告诉你,MySQL order by的用法。ORDER
  • 1、终极方法:条件注释<!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本。 <![endif]
  • 问题当浏览SQL Server 2008的新特性时,我们看到了透明数据加密。这看起来很有趣。您能为我们解释一下并介绍下执行它的细节吗?专家解
  • BCP语句的作用:BCP是SQL提供的进行数据传输的实用程序,这种语句提供了非常快的数据导入的方法。(当然7。0也有BCP的替代方法就是DT
  • [sql] -- ===================【创建存储过程】===================== USE [Message
  • 1.由于设置了slave的配置信息,mysql在数据库data目录下生成master.info,所以如有要修改相关slave的配置要先删除该
  • 1、汉语分词的由来使用ASP开发的中小企业的网站,对于站内搜索,往往只是简单的通过SQL语句匹配数据库。对于比较短的词语搜索,这个方法是有效
  • 数据库操作类的优点优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与mysql
  • 一、前言:在经过一段时间的存储过程开发之后,写下了一些开发时候的小结和经验与大家共享,希望对大家有益,主要是针对Sybase和SQL Ser
  • 今天我们继续向大家介绍一款翻页效果的制作。当鼠标移动到链接上时,翻页的链接区除了有悬停效果,还会放大。这样的效果具有很强烈的效果。大家适当美
  • 用途:图片经常使用onload来改变宽度,但这样会出现图片的闪烁,这个简单的类就是用来解决这个问题的。函数loadImage,用来加载图片,
  • 网页制作中用到的特效字,你一定是用图象处理软件制作的吧!告诉你,不用图象处理软件,我也能做出漂亮的特效字来,你看,阴影字我就是这样做出来的。
  • 来自Usability Post的Categories vs Tags作者认为“就博客而言,标签没有太大意义。”I don’t think
手机版 网络编程 asp之家 www.aspxhome.com