go run command-尊龙官方平台

go run command-line-arguments

el/2024/3/25 16:38:14

go run command-line-arguments


1.复现

目录结构:

$ tree test1280
test1280
|-- go.mod
|-- hello.go
`-- main.go

代码内容:

/*go.mod*/
module test1280go 1.16/*hello.go*/
package mainimport "fmt"func hello() {fmt.println("hello,test1280!")}/*main.go*/
package mainfunc main() {hello()
}

执行过程:

$ go run main.go
# command-line-arguments
./main.go:4:2: undefined: hello$ ls -l
total 12
-rw-rw-r-- 1 jiang jiang 25 may 26 09:44 go.mod
-rw-rw-r-- 1 jiang jiang 79 may 26 11:09 hello.go
-rw-rw-r-- 1 jiang jiang 39 may 26 11:09 main.go

出现报错:

# command-line-arguments
./main.go:4:2: undefined: hello

但是,在ide(idea-goland)中没有提示报错:

在这里插入图片描述

注意,执行 go run main.go 将出错,但是以下命令可以正确执行:

$ go run test1280
hello,test1280!

或者:

$ go build && ./test1280
hello,test1280!

2.解决

执行命令:

$ go run main.go hello.go 
hello,test1280!

或者:

$ go run .
hello,test1280!

或者:

$ go run *.go
hello,test1280!

3.原因

go run 时,会先编译命令行输入的所有go文件集合生成可执行文件然后执行之。

注意,go run 时,编译的是命令行参数输入的go文件,之前错误的命令是:

go run main.go

实际上main.go依赖于hello.go文件,因此,仅从main.go中找不到hello函数,undefined。

正确方法:

a.在go run时传入所有的依赖的go文件,例如:

/* solution1 */
go run main.go hello.go/* solution2 */
go run ./* solution3 */
go run *.go

b.在go run时传入module而非go文件,例如:

$ go run test1280
hello,test1280!
# go run ,本例中module name是test1280,参见go.mod文件

c.用go build替代go run,例如:

$ go build && ./test1280
hello,test1280!
# go build && ./,本例中生成的可执行文件是test1280

4.参考

https://www.jianshu.com/p/6a6e3e7b7c83
采用go run命令执行的时候,需要把待加载的.go文件都包含到参数里面。

https://groups.google.com/g/golang-nuts/c/jlwclcw5eli/m/qhu27ll3agaj
“go run” builds and runs what you tell it: only main.go.

https://www.codercto.com/a/52404.html

https://studygolang.com/topics/9270
go run *.go …
不然只编译你指定的文件啊


http://www.ngui.cc/el/5127025.html

相关文章

go:unresolved reference xx(1)

go:unresolved reference xx(1) 1.环境 goland版本:goland 2020.3.5 go版本:1.16.4 ebdesktop-k45ia6v mingw64 ~/desktop/test1280 $ go version go version go1.16.4 windows/amd64goland中选择的sdk版本:1.16.4 goland已经en…

go:unresolved reference xx(2)

go:unresolved reference xx(2) 1.环境 goland版本:2021.1.2 go版本:1.16.4 ebdesktop-k45ia6v mingw64 ~ $ go version go version go1.16.4 windows/amd642.背景 我们通常执行go get指令完成第三方依赖库的安装。 go get指令具体做了哪…

goland:cannot resolve symbol

goland:cannot resolve symbol 1.环境 goland版本:2021.1.2 go版本:1.16.4 ebdesktop-k45ia6v mingw64 ~/desktop/test1280 $ go version go version go1.16.4 windows/amd642.报错 包import处报错:cannot resolve symbol 项目…

idea(goland):隐藏显示 scroll from source 小齿轮 定位文件

idea(goland):隐藏显示 scroll from source 小齿轮 定位文件 scroll from source 的作用:定位跳转到当前打开的文件在目录树中位置。 隐藏 scroll from source : show options menu -> autoscroll from source(勾选࿰…

mingw:安装gcc、g

mingw:安装gcc、g 1.mingw是什么? wiki:https://en.wikipedia.org/wiki/mingw mingw (“minimalist gnu for windows”), formerly mingw32, is a free and open source software development environment to create microsoft windows appl…

vmware: 虚拟机启动没有ip地址

vmware: 虚拟机启动没有ip地址 1.现象 启动虚拟机后没有ip地址: 2.环境 vmware版本: 虚拟机设置: 3.解决 a.打开windows服务: wins打开搜索框输入services.msc: 或者winr打开“运行”输入services.msc:…

ssh:免密登陆

ssh:免密登陆 1.windows 1.1.生成公私钥 在cmd.exe中使用ssh-keygen工具生成公私钥: ssh-keygen -t rsa -b 2048 microsoft windows [版本 10.0.17763.107] (c) 2018 microsoft corporation。保留所有权利。c:\users\eb>ssh-keygen -t rsa -b 204…

gitlab:ssh添加公钥免密访问

gitlab:ssh添加公钥免密访问 通常,我们使用http方式访问gitlab并输入用户名称、密码鉴权然后clone仓库: 此外,也可以通过生成公私钥,并将公钥存储在gitlab中实现免密登陆。 1.公私钥生成 ssh-keygen -t rsa -b 2048 …

gitlab:免密认证鉴权

gitlab:免密认证鉴权 gitlab支持多种协议,常用的有http以及ssh。 gitlab如何设置免密认证鉴权呢? 1.http免密 通过设置netrc实现http免密。 1.1.windows配置 新建windows环境变量:home(%userprofile%) …

gitlab:从内网拉取私有仓库go module

gitlab:从内网拉取私有仓库go module golang通过go mod管理项目依赖。 通常,我们从github等项目托管平台拉取依赖go module。 例如:go get -u github.com/kataras/iris/v12 假如,公司有内网gitlab托管项目代码,如何…
网站地图