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

 更新时间:2022年11月29日 16:10:33   作者:非晓为骁  
go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包,下面这篇文章主要给大家介绍了关于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语言中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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang HTTP 服务器 处理 日志/Stream流的操作

    golang HTTP 服务器 处理 日志/Stream流的操作

    这篇文章主要介绍了golang HTTP 服务器 处理 日志/Stream流的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言实现一个简单的并发聊天室的项目实战

    Go语言实现一个简单的并发聊天室的项目实战

    本文主要介绍了Go语言实现一个简单的并发聊天室的项目实战,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Golang设计模式之责任链模式讲解和代码示例

    Golang设计模式之责任链模式讲解和代码示例

    责任链是一种行为设计模式, 允许你将请求沿着处理者链进行发送, 直至其中一个处理者对其进行处理,本文就详细给大家介绍一下Golang 责任链模式,文中有详细的代码示例,需要的朋友可以参考下
    2023-06-06
  • Golang使用Gin创建Restful API的实现

    Golang使用Gin创建Restful API的实现

    本文主要介绍了Golang使用Gin创建Restful API的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Go语言到底有没有引用传参(对比 C++ )

    Go语言到底有没有引用传参(对比 C++ )

    这篇文章主要介绍了Go 到底有没有引用传参(对比 C++ ),需要的朋友可以参考下
    2017-09-09
  • Golang filepath包常用函数详解

    Golang filepath包常用函数详解

    本文介绍与文件路径相关包,该工具包位于path/filepath中,该包试图与目标操作系统定义的文件路径兼容。本文介绍一些常用函数,如获取文件绝对路径,获取文件名或目录名、遍历文件、分割文件路径、文件名模式匹配等函数,并给具体示例进行说明
    2023-02-02
  • Golang并发编程之Channel详解

    Golang并发编程之Channel详解

    传统的并发编程模型是基于线程和共享内存的同步访问控制的,共享数据受锁的保护,使用线程安全的数据结构会使得这更加容易。本文将详细介绍Golang并发编程中的Channel,,需要的朋友可以参考下
    2023-05-05
  • Golang中四种gRPC模式举例详解

    Golang中四种gRPC模式举例详解

    gRPC是一种进程间通信技术,在微服务和云原生领域都有着广泛的应用,下面这篇文章主要给大家介绍了关于Golang中四种gRPC模式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 超实用的Golang通道指南之轻松实现并发编程

    超实用的Golang通道指南之轻松实现并发编程

    Golang 中的通道是一种高效、安全、灵活的并发机制,用于在并发环境下实现数据的同步和传递。本文主要介绍了如何利用通道轻松实现并发编程,需要的可以参考一下
    2023-04-04
  • Go Grpc Gateway兼容HTTP协议文档自动生成网关

    Go Grpc Gateway兼容HTTP协议文档自动生成网关

    这篇文章主要为大家介绍了Go Grpc Gateway兼容HTTP协议文档自动生成网关示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论