definicion body go relative-path revel

body - cómo hacer referencia a un archivo relativo de código y pruebas



body html definicion (2)

Necesito hacer referencia a patients.json de patients.go , aquí está la estructura de la carpeta:

Si lo hago:

filepath.Abs("../../conf/patients.json")

funciona para la go test ./... pero falla para la revel run

Si lo hago:

filepath.Abs("conf/patients.json")

sucede exactamente lo contrario (deleite está bien, pero las pruebas fallan).

¿Hay alguna forma de referenciar correctamente el archivo para que funcione tanto para las pruebas como para la ejecución normal del programa?



Las rutas relativas siempre se interpretan / resuelven a una ruta base: el directorio actual o de trabajo ; por lo tanto, siempre tendrá sus limitaciones.

Si puede vivir cuidando siempre el directorio de trabajo correcto, puede seguir usando rutas relativas.

Lo que sugeriría es no confiar en el directorio de trabajo, sino en una ruta base explícitamente especificada. Esto puede tener un valor predeterminado codificado en su aplicación (que también puede ser el directorio de trabajo), y debe proporcionar varias formas de anular su valor.

Formas recomendadas para anular la ruta base a la que se resuelven sus rutas "relativas":

  1. Indicador de línea de comando (ver paquete de flag )
  2. Variable de entorno (ver os.Getenv() )
  3. (Fix named) Config file en el directorio de inicio del usuario (ver os/user/User y os/user/Current() )

Una vez que tenga la ruta base, puede obtener la ruta completa al unir la ruta base y la ruta relativa. Puede usar path.Join() o filepath.Join() , por ejemplo:

// Get base path, from any or from the combination of the above mentioned solutions base := "/var/myapp" // Relative path, resource to read/write from: relf := "conf/patients.json" // Full path that identifies the resource: full := filepath.Join(base, relf) // full will be "/var/myapp/conf/patients.json"