Как использовать имя переменной с тем же именем, что и у пакета в Go? - PullRequest
12 голосов
/ 14 октября 2011

Общее имя переменной для файлов или каталогов - «путь». К сожалению, это также название пакета в 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 ]

11 голосов
/ 14 октября 2011

path string скрывает импортированный path. Что вы можете сделать, это установить псевдоним импортированного пакета, например, pathpkg, изменив строку "path" в import на pathpkg "path", поэтому начало вашего кода выглядит следующим образом

package main

import (
    pathpkg "path"
    "os"
)

Конечно, тогда вы должны изменить код DoIt на:

pathpkg.Join(os.TempDir(), path)
1 голос
/ 15 октября 2011
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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...