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

时间:2011-10-14 18:54:37

标签: package go variable-names

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

package main

import (
    "path"
    "os"
)

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

func DoIt(path string) {
    path.Join(os.TempDir(), path)
}

我得到的错误是:

$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)

2 个答案:

答案 0 :(得分:10)

path string正在隐藏导入的path。您可以做的是将导入包的别名设置为例如pathpkg将"path"中的行import更改为pathpkg "path",因此代码的开头就是这样的

package main

import (
    pathpkg "path"
    "os"
)

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

pathpkg.Join(os.TempDir(), path)

答案 1 :(得分:1)

package main

import (
    "path"
    "os"
)

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

// Just don't introduce a same named thing in the scope
// where you need to use the package qualifier.
func DoIt(pth string) {
    path.Join(os.TempDir(), pth)
}