有没有一种好的方法可以消除程序包名称和局部变量之间的歧义?如果不需要,我不想重构导入名称或变量名称。以...为例
import "path"
func foo() {
path := "/some/path"
// Disambiguate here
path.Join(path, "/some/other/path")
}
Run Code Online (Sandbox Code Playgroud)
局部变量始终在此处覆盖(阴影)程序包。选择另一个变量名,或为程序包加上其他别名:
http://play.golang.org/p/9ZaJa5Joca
要么
http://play.golang.org/p/U6hvtQU8dx
参见其他答案中的nemo替代品。我认为最可维护的方法是选择一个与程序包名称不重叠的变量名。
我能想到的还有两个额外的选择:
path.Join
在变量中path
一个实现的类型Join
第一个很简单。而不是在声明之前path.Join
存储path.Join
在变量中path
并改为调用它(play):
join := path.Join
path := "/some/path"
path = join("/some/other/path")
Run Code Online (Sandbox Code Playgroud)
第二个有点复杂,我认为您实际上不应该这样做,但这是一种可能性(play):
type Path string
func (p Path) Join(elem ...string) string {
return path.Join(append([]string{string(p)}, elem...)...)
}
fmt.Println("Hello, playground")
path := "/some/path"
path = Path(path).Join("/some/other/path")
Run Code Online (Sandbox Code Playgroud)