专栏首页landv[golang]Go常见问题:# command-line-arguments: ***: undefined: ***

[golang]Go常见问题:# command-line-arguments: ***: undefined: ***

今天遇见一个很蛋疼的问题,不知道是不是我配置的问题,IDE直接run就报错。

问题描述

在开发代码过程中,经常会因为逻辑处理而对代码进行分类,放进不同的文件里面;像这样,同一个包下的两个文件,点击idea的运行按钮或者运行 go run main.go命令时,就会报错,如图所示。

那就好吧,我直接命令运行咯,go run main.go,一样的结果。

IDE的配置,Run _kind:以file模式启动就报错,以package包模式就不会报错。

酱紫就不会报错了

原因分析

当然通过命令模式也会发现这样蛋疼的问题,go build不报错,直接go run main.go就报错。

这事你得揪其因呀,出现蛋疼问题就得抚平咯,哈哈哈。

在源代码的main函数中,我们发现从base.Commands的切片中获取要执行的命令,然后和传入的args一起执行cmd.Run(cmd, args)这个方法;

然后再回过头看cmd.Run(cmd, args)这个函数,结果发现它只是定义了一种类型,具体实现这里没有指出;

紧接着回头去看run包下的函数,会发现run.go在初始化的时候,会把改文件下的runRun()函数赋值给base.Command{}定义的对象CmdRun,结果会发现runRun函数的的参数类型和个数完全符合cmd.Run(cmd, args)这个函数类型,在go语言中,函数的参数类型和参数个数符合定义的函数类型,则说明改函数实现了定义函数(注:go语言中,函数与方法不同)。

在runRun()函数中,会发现files和cmdArgs接收的是传过来的文件列表,然后会通过GoFilesPackage(files),然后会入栈、加载、出栈等操作,由于启动的时候传递的只是一个.go文件,并没有传递demo.go,所以系统在加载main.go文件中并没有找到compose.go 文件中定义的变量,则在

widget.NewToolbarAction(theme.MailComposeIcon(), func() { newCompose(m.app, m.server).loadUI().Show() }),

这一行,开始出错。

正确操作:

该出错原因属于go的多文件加载问题,采用go run命令执行的时候,需要把待加载的.go文件都包含到参数里面。通过go run *.go(目录里面没有test.go才行)

或者配置IDE以package包模式就不会报错。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [golang]Go内嵌静态资源go-bindata的安装及使用

    使用 Go 开发应用的时候,有时会遇到需要读取静态资源的情况。比如开发 Web 应用,程序需要加载模板文件生成输出的 HTML。在程序部署的时候,除了发布应用可...

    landv
  • [golang]golang 汇编

    在某些场景下,我们需要进行一些特殊优化,因此我们可能需要用到golang汇编,golang汇编源于plan9,此方面的 介绍很多,就不进行展开了。我们WHY和H...

    landv
  • 关于golang-mod的使用方法

    go mod download 下载模块到本地缓存,缓存路径是 $GOPATH/pkg/mod/cache

    landv
  • Go语言实战笔记(二)| Go开发工具

    在Go语言中,我们很多操作都是通过go命令进行的,比如我们要执行go文件的编译,就需要使用go build命令,除了build命令之外,还有很多常用的命令,这一...

    飞雪无情
  • golang学习之win7下go环境搭建

    以下均采用windows64环境,首先是go的下载,go有msi安装安装和zip解压安装两种安装方式,使用msi安装后go环境会自动配置,zip解压后需手动配置...

    用户1141560
  • Docker 镜像多阶段构建

    本文内容来自我参与维护的 《Docker 从入门到实践》 项目。 之前的做法 在 Docker 17.05 版本之前,我们构建 Docker 镜像时,通常会采用...

    康怀帅
  • Go命令官方指南【原译】

    如果构建的参数是.go文件的列表,则build会将它们视为指定单个包的源文件列表。

    sunsky
  • 【从零开始学习Go语言】四.Go常用命令释义

    go run 命令用于编译并运行命令源码文件,如果你用vim编辑go文件并希望他暂时跑起来查看效果,使用此命令:go run file_name

    一只特立独行的兔先生
  • 【从零开始学习Go语言】四.Go常用命令释义

    go run 命令用于编译并运行命令源码文件,如果你用vim编辑go文件并希望他暂时跑起来查看效果,使用此命令:go run file_name

    一只特立独行的兔先生
  • Go 语言分享

    Go 语言从 2009 年发布第一版开始,逐渐变的流行,被人所熟知,但是很多人可能听说过 go,但是对 go 的特性并不是很了解,这里主要介绍 go 的一些关键...

    serena

扫码关注云+社区

领取腾讯云代金券