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

