在Go中消除包名与本地变量之间的歧义
有没有一种消除包名和局部变量之间歧义的好方法?如果不需要的话,我宁愿不重构导入名或变量名。例如在Go中消除包名与本地变量之间的歧义,go,package,Go,Package,有没有一种消除包名和局部变量之间歧义的好方法?如果不需要的话,我宁愿不重构导入名或变量名。例如 import "path" func foo() { path := "/some/path" // Disambiguate here path.Join(path, "/some/other/path") } 局部变量始终覆盖(阴影)此处的包。选择另一个变量名,或将包别名为其他名称: 或 请参见另一个答案中的尼莫替代方案。我认为最容易维护的方法是选择一个不会与包名重
import "path"
func foo() {
path := "/some/path"
// Disambiguate here
path.Join(path, "/some/other/path")
}
局部变量始终覆盖(阴影)此处的包。选择另一个变量名,或将包别名为其他名称: 或
请参见另一个答案中的尼莫替代方案。我认为最容易维护的方法是选择一个不会与包名重叠的变量名。我可以想到另外两个选项:
path
成为实现Join
path.Join
您将path.Join
存储在变量中,然后声明path
并调用它():
第二个有点复杂,我不认为你真的应该这么做,但这是可能的
():
我也不希望这样做。。。但看来我不得不这么做了。谢谢。聪明的:P我仍然认为像这样维护代码是令人困惑的。最干净的方法(IMO)是选择一个不同的变量名。我同意。这更像是最后的手段:)危险!这回答了你的问题吗@克拉夫米尔这个问题在7年前得到了回答。
join := path.Join
path := "/some/path"
path = join("/some/other/path")
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")