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?
Nunca he usado Revel pero me parece útil lo siguiente:
http://revel.github.io/docs/godoc/revel.html
-
revel.BasePath
-
revel.AppPath
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":
- Indicador de línea de comando (ver paquete de
flag
) - Variable de entorno (ver
os.Getenv()
) - (Fix named) Config file en el directorio de inicio del usuario (ver
os/user/User
yos/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"