2011-10-14 15 views
7

Un nombre de variable común para archivos o directorios es "ruta". Desafortunadamente ese también es el nombre de un paquete en Go. Además, cambiando la ruta como nombre de argumento en DoIt, ¿cómo puedo compilar este código?¿Cómo se usa un nombre de variable con el mismo nombre que un paquete en Go?

package main 

import (
    "path" 
    "os" 
) 

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

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

El error que consigo es:

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

Respuesta

9

El path string se cubrían el path importado. Lo que puede hacer es establecer el alias del paquete importado, p. pathpkg cambiando la línea "path" en import en pathpkg "path", por lo que el comienzo de su código es el siguiente

package main 

import (
    pathpkg "path" 
    "os" 
) 

Por supuesto, entonces usted tiene que cambiar el código DoIt en:

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

estaba miedo de que esa sea la respuesta ... Desearía que hubiera otra manera, pero no la estoy viendo. – Nate

+0

¿Sabes qué es algo irónico? El código del paquete de ruta no tiene esta limitación. Si echas un vistazo a path.Split (http://golang.org/src/pkg/path/path.go?s=2665:2707#L97), verás que tiene un argumento llamado path. la ruta se define en el archivo, pero no se importa ... – Nate

+3

Esta limitación no se aplica allí, porque no hay ningún paquete 'ruta' importado ni ninguna otra variable' ruta' para sombrear, pero puedo suponer que ya lo sabe. ;) – 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í, esa es la forma obvia de hacerlo. Me preguntaba si había otra forma ... – Nate

+0

Por supuesto que no era lo que OP significaba. Tu respuesta es totalmente irrelevante. –

Cuestiones relacionadas