Golang中如何将本地子包导入main.go
Golang中如何将本地子包导入main.go 大家好,我是Go语言的新手。我对模块管理感到非常困惑,当我尝试导入本地包并使用其参数时遇到了错误。这真是太奇怪了!
我的Go环境设置如下:
GO111MODULE="on"
GOPATH="/root/go"
GOROOT="/usr/local/go"
GOVERSION="go1.18.2"
我的文件夹结构如下:
test-module
--dir1
----dir1.go
--go.mod
--main.go
main.go 文件导入了 dir1 包并打印参数 a。
main.go
1 package main
2 import(
3 "fmt"
4 "test-module/dir1"
5 )
6
7 func main(){
8 fmt.Println(dir1.a)
9 }
go.mod
module test-module
go 1.18
dir1.go
package dir1
var a = 2
当我尝试运行主文件时(go run main.go),出现了以下错误:
# command-line-arguments
./main.go:8:19: undefined: dir1.a
更多关于Golang中如何将本地子包导入main.go的实战教程也可以访问 https://www.itying.com/category-94-b0.html
小写符号不会从包中“导出”。你需要使用大写的 A。
更多关于Golang中如何将本地子包导入main.go的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢!!!!!!!!!!! 
在Go语言中,变量名首字母的大小写决定了其可见性。只有首字母大写的标识符(变量、函数、类型等)才能被其他包访问。在你的代码中,dir1包中的变量a是小写字母开头,因此无法从main包中访问。
以下是修正后的代码:
dir1/dir1.go:
package dir1
var A = 2 // 将a改为大写A以导出变量
main.go:
package main
import (
"fmt"
"test-module/dir1"
)
func main() {
fmt.Println(dir1.A) // 使用导出的变量名A
}
另外,确保你的go.mod文件中的模块名称与导入路径一致。根据你的文件夹结构,当前设置是正确的:
go.mod:
module test-module
go 1.18
现在运行go run main.go应该能正常输出2。
如果你需要保持变量名小写但又要允许外部访问,可以通过导出函数来实现:
dir1/dir1.go:
package dir1
var a = 2
func GetA() int {
return a
}
main.go:
package main
import (
"fmt"
"test-module/dir1"
)
func main() {
fmt.Println(dir1.GetA())
}
这两种方式都能解决你的问题。第一种方式直接导出变量,第二种方式通过getter函数访问私有变量。

