我最近用Go编写了以下代码:
import (
tasks "code.google.com/p/google-api-go-client/tasks/v1"
)
func tasksMain(client *http.Client, argv []string) {
taskapi, _ := tasks.New(client)
tasklists, _ := taskapi.Tasklists.List().Do()
for _, tasklist := range tasklists.Items {
tasks, _ := taskapi.Tasks.List(tasklist.Id).Do()
for _, task := range tasks.Items {
log.Println(task.Id, task.Title)
}
}
}但后来我意识到,现在名称空间“任务”被变量“任务”所隐藏。
所以我想知道,一旦名称空间被一个变量隐藏了,是否还能继续访问它呢?如果没有,是否有其他常见的技术来处理这种情况。使用所有奇怪的短名称空间("url“、”字节“、”字符串“等),它似乎保留了所有可能的变量名称。有什么建议吗?
发布于 2013-09-06 06:48:17
没有“保留”,因为您可以重命名变量或用于引用包的名称。
导入时只需为包提供另一个别名:
import (
tsk "code.google.com/p/google-api-go-client/tasks/v1"
)
...
taskapi, _ := tsk.New(client)发布于 2013-09-06 07:50:25
它与名称空间无关。这是范围界定的一个一般属性:
func foo() {
var a int
{
a := 42
// Cannot access the outer 'a' here.
}
}解决方案与一般情况相同:如果您想访问外部的实体(外部的实体),不要定义与在外部作用域中定义的实体相同的实体。在上面的片段中,内部'a‘将被命名为eg。“a2”或“b”或除“a”以外的任何东西。
当然,dystroy的回答也是正确的。它等于将外部'a‘重命名为其他东西。
我只是想指出,您的问题是一般性问题的一个特定实例,通用解决方案适用于它。
https://stackoverflow.com/questions/18651558
复制相似问题