如何访问Go中变量隐藏的命名空间?

lau*_*ent 3 variables namespaces go name-collision

我最近在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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但后来我意识到现在名称空间"任务"被变量"任务"隐藏了.

所以我想知道,一旦被变量隐藏了,还有什么方法可以访问命名空间吗?如果没有,是否有任何其他常用技术来处理这种情况.使用Go使用的所有奇怪的短命名空间("url","bytes","strings"等),似乎它保留了所有潜在的变量名称.有什么建议吗?

Den*_*ret 6

没有任何"保留",因为您可以重命名变量或用于引用包的名称.

导入时,只需为包提供另一个别名:

import (
    tsk "code.google.com/p/google-api-go-client/tasks/v1"
)

...

taskapi, _ := tsk.New(client)
Run Code Online (Sandbox Code Playgroud)