2011-10-14 11 views
7

Un nome di variabile comune per file o directory è "percorso". Purtroppo questo è anche il nome di un pacchetto in Go. Inoltre, cambiando percorso come nome argomento in DoIt, come faccio a compilare questo codice?Come si usa un nome di variabile con lo stesso nome di un pacchetto in Go?

package main 

import (
    "path" 
    "os" 
) 

func main() { 
    DoIt("file.txt") 
} 

func DoIt(path string) { 
    path.Join(os.TempDir(), path) 
} 

L'errore che ottengo è:

$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) 

risposta

9

Il path string è shadowing importato path. Quello che puoi fare è impostare l'alias del pacchetto importato ad es. pathpkg cambiando la riga "path" in import in pathpkg "path", quindi l'inizio del codice va in questo modo

package main 

import (
    pathpkg "path" 
    "os" 
) 

Naturalmente poi si deve modificare il codice DoIt in:

pathpkg.Join(os.TempDir(), path) 
+0

ero paura che sarebbe la risposta ... Vorrei che ci fosse un altro modo, ma non lo vedo. – Nate

+0

Sai cos'è un po 'ironico? Il codice del pacchetto del percorso non ha questa limitazione. Se dai un'occhiata a path.Split (http://golang.org/src/pkg/path/path.go?s=2665:2707#L97), vedrai che ha un argomento chiamato path. il percorso è definito nel file, ma non importato ... – Nate

+3

Questa limitazione non si applica lì, perché non c'è alcun pacchetto 'path' importato e nessun'altra variabile' path' su shadow, ma posso presumere che tu lo sappia già. ;) – macbirdie

0
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) 
} 
+0

Sì, questo è il modo più ovvio per farlo. Mi stavo chiedendo se ci fosse un altro modo ... – Nate

+0

Ovviamente non era quello che intendeva OP. La tua risposta è totalmente irrilevante. –