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

3 回复

小写符号不会从包中“导出”。你需要使用大写的 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函数访问私有变量。

回到顶部