如何在Go中使用与包名相同的变量名?

Nat*_*ate 12 variable-names package go

文件或目录的通用变量名称是"path".不幸的是,这也是Go中包的名称.此外,在DoIt中将路径更改为参数名称,如何编译此代码?

package main

import (
    "path"
    "os"
)

func main() {
    DoIt("file.txt")
}

func DoIt(path string) {
    path.Join(os.TempDir(), path)
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

$6g pathvar.go 
pathvar.go:4: imported and not used: path
pathvar.go:13: path.Join undefined (type string has no field or method Join)
Run Code Online (Sandbox Code Playgroud)

mac*_*die 11

path string是导入的阴影path.您可以做的是通过更改行"path"import输入pathpkg "path",将导入包的别名设置为例如pathpkg ,因此代码的开头就像这样

package main

import (
    pathpkg "path"
    "os"
)
Run Code Online (Sandbox Code Playgroud)

当然,你必须将DoIt代码更改为:

pathpkg.Join(os.TempDir(), path)
Run Code Online (Sandbox Code Playgroud)

  • 我担心这就是答案...希望有另一种方式,但我没有看到它。 (3认同)
  • 这个限制不适用于那里,因为没有导入包`path`而没有其他`path`变量为shadow,但我可以假设你已经知道了.;) (3认同)