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

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

记一次在写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

标签:go,build报错,undefined
0
投稿

猜你喜欢

  • Jquery获取和修改img的src值的方法

    2024-04-22 13:05:32
  • 文字超长自动省略,以...代替,CSS实现

    2009-07-16 10:15:00
  • 在前女友婚礼上用python把婚礼现场的WIFI名称改成了

    2023-05-26 15:15:49
  • 浅析mysql.data.dll驱动各版本介绍

    2024-01-24 04:26:30
  • 详解Python如何实现对比两个Excel数据差异

    2023-06-14 00:37:10
  • 初学python数组的处理代码

    2023-10-14 19:30:19
  • MySQL简单了解“order by”是怎么工作的

    2024-01-16 10:52:41
  • Python+OpenCV实现信用卡数字识别的方法详解

    2022-01-15 14:25:41
  • python 字符串和整数的转换方法

    2023-10-11 02:31:42
  • 如何利用数据库内容建立一个下拉式列表?

    2010-01-01 15:46:00
  • JavaScript高级程序设计 阅读笔记(十七) js事件

    2024-04-19 09:55:17
  • Python 键盘事件详解

    2022-09-28 20:31:01
  • 关于go-zero单体服务使用泛型简化注册Handler路由的问题

    2023-08-30 20:19:08
  • 浅析Vue自定义组件的v-model

    2024-04-29 13:10:16
  • js数组去重的11种方法

    2024-04-17 10:30:54
  • 查看已安装tensorflow版本的方法示例

    2021-09-21 03:49:11
  • 对python .txt文件读取及数据处理方法总结

    2022-08-04 02:36:07
  • PHP中判断变量为空的几种方法分享

    2024-06-05 09:35:25
  • MySQL实现JDBC详细步骤

    2024-01-28 13:39:11
  • 永久解决VSCode终端中文乱码问题

    2023-09-18 14:47:57
  • asp之家 网络编程 m.aspxhome.com