Golang中如何在不使用mod的情况下操作文件

Golang中如何在不使用mod的情况下操作文件 我在同一文件夹中有两个文件:

// 文件路径和名称:go_first_steps/main.go
package main

import "fmt"

func main() {
	fmt.Println(a)
	fmt.Println(b)
}

// 文件路径和名称:go_first_steps/constants.go
package main 

const (
a = `Hello`
b = `Gopher`
)

运行 go run main.go 后,我得到了以下错误:

# command-line-arguments
.\main.go:8:14: undefined: a
.\main.go:9:14: undefined: b

更多关于Golang中如何在不使用mod的情况下操作文件的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你必须编译所有文件。换句话说:

$ go run main.go constants.go

或者,你可以使用目录位置作为目标:

$ go run .  # 指当前目录

原因:编译器理解你想要运行 main.go,但不理解你需要跨相邻文件的直接依赖。

更多关于Golang中如何在不使用mod的情况下操作文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go中,当不使用模块(mod)时,你需要正确指定要编译的文件。对于你的情况,有两种解决方案:

方案1:指定所有.go文件进行编译

# 在go_first_steps目录中运行
go run main.go constants.go

或者使用通配符:

go run *.go

方案2:使用包编译方式

# 先编译整个包
go build

# 然后运行生成的可执行文件
./go_first_steps.exe  # Windows
./go_first_steps      # Linux/Mac

示例说明

你的代码结构是正确的,问题在于go run默认只编译指定的单个文件。当不使用go.mod模块管理时,Go编译器不会自动扫描目录下的所有文件。

这是不使用模块时的正常行为。如果你希望保持这种工作方式,每次运行都需要明确指定所有相关文件:

# 假设有更多文件
go run main.go constants.go utils.go helpers.go

验证代码

你的代码本身是正确的,可以这样验证:

// main.go
package main

import "fmt"

func main() {
	fmt.Println(a)
	fmt.Println(b)
}

// constants.go  
package main

const (
	a = "Hello"
	b = "Gopher"
)

运行:

go run main.go constants.go

输出:

Hello
Gopher
回到顶部