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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • go语言调用其他包中的函数简单示例

    目录 需求 步骤 附:Go语言同一个包中不同文件之间函数调用 总结 需求 我们想在程序的入口main.go中调用service包下的user_service.go中的函数,该如何调用呢?示例如下 步骤 新建一个文件夹pkgdemo1(名字任意),通过vscode打开 然后在终端转到该目录下(这里我用的linux操作的,windows操作系统可以是使用bash或者是命令行代替,操作差别不大) 使用命令 go mod init zhu.com/project01 zhu.com相当于java项目中的

  • 一文带你轻松学会Go语言动态调用函数

    目录 前言 JavaScript 动态调用函数 Go 中动态调用方法 前言 经常在开发的时候会遇到这样的场景,几个模块的都有相同的方法,但会因为不同的类型的需要调用不同模块的方法.使用一个 switch 可以很方便的解决问题.但是当你遇到的场景是几个模块的方法都是需要的执行,同时它需要在不同的配置下执行相对应的方法. func m1(){} func m2(){} func m3(){} c := cron.New(cron.WithSeconds()) c.addFunc(config1,fu

  • Go语言中同一个package中函数互相调用为undefined的解决

    目录 同一个package中函数互相调用为undefined的解决 解决方案 同一个package下不同文件中函数调用报未定义问题 解决方式大致有两种 总结 同一个package中函数互相调用为undefined的解决 代码如下: package main import "fmt" func main() { myFunc() } func init() { fmt.Println("there is main.init()") } package main imp

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

    目录 问题 范例代码 操作 解决 修改后代码 总结 记一次在写cli脚本的时候,碰到的一个问题. 问题 自己是写服务端的,有时候会写一些cli脚本去跑测试.习惯main.go写主流程,其他子文件写方法,这样子代码不会都在main.go里面.但这么写直接GoLand点击main旁边的按钮是可以执行,一旦用go build就报某个引用的方法,undefined. 范例代码 //main.go package main import "fmt" func main() { fmt.Print

  • Sql Server "用户登录失败,错误编18456"的解决过程

    目录 1.说明 2.其他错误信息 排错分析 总结 Sql Server 解决“用户登录失败,错误编号18456” 1.说明 因密码或用户名错误而使身份验证失败并导致连接尝试被拒时,类似以下内容的消息将返回到客户端:“用户‘<user_name>’登录失败. (Microsoft SQL Server,错误:18456)”. 返回到客户端的其他信息有: “用户‘<user_name>’登录失败. (.Net SqlClient 数据访问接口)” -------------------

  • vue props传值失败 输出undefined的解决方法

    如果在prop中传的值为一个没有使用特殊命名规则的变量如:(type),可以顺利传值: <code class="language-html"><div id="app"> <test :type="type"></test> </div> Vue.component("test", { props: ['type'], template: '<div @cli

  • 解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)

    问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得问题解决!!! 真的看着都难受, 但是, 终于, 还是让我搞定了,这次让我汇总所有最有可能解决这依赖问题的方法,下次遇到这种问题, 真的要说再见了 , 话不多开,开货!!!方案1:(本人平时遇到这问题的常规操作) 当一开始遇到导入的依赖报红了,直接把那段刚导入的对应依赖删了,然后又重新导入,它自动会

  • 解决JSON数据因为null导致数据加载失败的方法

    一.首先分析问题: 使用NSJSONSerialization或者AFN框架的AFHTTPSessionManager(底层也是NSJSONSerialization)将NSData数据转化成OC对象,有时会出现URL正确,加载数据任然会报错: reason: '-[NSNull length]: unrecognized selector sent to instance 分析原因发现,转化出来的OC对象中含有null.所以,NSNull没有length方法,所以会报找不到方法错误. 二.解决

  • Android Studio 报错“app:processDebugResources"解决方法

    Android Studio 报错"app:processDebugResources"解决方法 Android Studio项目Build的时候报了这么一个错误: Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Pro

  • python用pip install时安装失败的一系列问题及解决方法

    pip简介 pip 是一个现代的,通用的 Python 包管理工具.提供了对 Python 包的查找.下载.安装.卸载的功能 pip是官方推荐的安装和管理Python包的工具,用其来下载和管理Python非常方便.pip最大的优势是它不仅能将我们需要的包下载下来,而且会把相关依赖的包也下载下来.下面简单介绍一下python用pip install时安装失败问题. 昨天想下载python的pillow库,结果遇到各种问题 一些注意事项和问题的解决方案如下: 先检查python是否安装成功命令行直接

  • python安装dlib库报错问题及解决方法

    问题描述 我是debain 系的linux系统没遇到这个问题,在centos系统遇到的 Collecting dlib   Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/63/92/05c3b98636661cb80d190a5a777dd94effcc14c0f6893222e5ca81e74fbc/dlib-19.19.0.tar.gz (3.2MB)     100% |███████████████████████

  • Pycharm中import torch报错的快速解决方法

    Pycharm中import torch报错 问题描述: 今天在跑GitHub上一个深度学习的模型,需要引入一个torch包,在pycharm中用pip命令安装时报错: 于是我上网寻求解决方案,试了很多都失败了,最后在:Anne琪琪的博客中找到了答案,下面记录一下解决问题的步骤: 1.打开Anaconda prompt执行下面命令: conda install pytorch-cpu torchvision-cpu -c pytorch 等待运行结束. 2. 测试torch是否安装成功 impo

  • 解决vue项目,npm run build后,报路径错的问题

    在build目录下的webpack.prod.conf.js里面: output: { path: config.build.assetsRoot, publicPath: "/dist/", // 添加这行代码,可解决该问题或者publicPath: "./",也可解决 filename: utils.assetsPath('js/[name].[chunkhash].js'), chunkFilename: utils.assetsPath('js/[id].[

随机推荐