Saltar al contenido

Importaciones relativas en Go

Nuestro team de expertos pasados varios días de investigación y de juntar de datos, hallamos la respuesta, queremos que todo este artículo sea de gran utilidad para tu proyecto.

Solución:

No, no hay una importación relativa en Go.
debe usar la ruta absoluta considerando GOPATH:

La variable de entorno GOPATH especifica la ubicación de su espacio de trabajo. Es probable que sea la única variable de entorno que deberá configurar al desarrollar el código de Go. Para comenzar, cree un directorio de espacio de trabajo y configure GOPATH en consecuencia. ver: https://golang.org/doc/code.html#GOPATH

Importar rutas

Una ruta de importación es un string que identifica de forma única un paquete. La ruta de importación de un paquete corresponde a su ubicación dentro de un espacio de trabajo o en un repositorio remoto (se explica a continuación).

Los paquetes de la biblioteca estándar reciben rutas de importación cortas como “fmt” y “net/http”. Para sus propios paquetes, debe elegir una ruta base que sea poco probable que colisione con futuras adiciones a la biblioteca estándar u otras bibliotecas externas.

Si mantiene su código en un repositorio fuente en algún lugar, entonces debe usar la raíz de ese repositorio fuente como su ruta base. Por ejemplo, si tiene una cuenta de GitHub en github.com/user, esa debería ser su ruta base.

Tenga en cuenta que no necesita publicar su código en un repositorio remoto antes de poder compilarlo. Es solo un buen hábito organizar su código como si fuera a publicarlo algún día. En la práctica, puede elegir cualquier nombre de ruta arbitrario, siempre que sea exclusivo de la biblioteca estándar y del gran ecosistema de Go.

Ejemplo:

Este ejemplo asume que usted ha establecido GOPATH=/goworkdir en el entorno de su sistema operativo.

Expediente: goworkdir/src/project1/utils/auth.go

package utils

func Test1() string 
    return "Test1"

Expediente: goworkdir/src/project1/controllers/login.go

package controllers

import "project1/utils"

func Test2() string 
    return utils.Test1()

Expediente: goworkdir/src/project1/main.go

package main

import (
    "fmt"
    "project1/controllers"
)

func main() 
    fmt.Println(controllers.Test2())

ahora si tu go run main.go deberías ver la salida:

Test1

Esto ahora es diferente desde la introducción de los módulos go, desde go 1.11.

Por lo tanto, si cambia a ir a los módulos, y si su módulo se llama “m”, entonces la forma idiomática de hacer importaciones relativas en su árbol de proyectos sería usar: import "m/utils" y import "m/controllers" en lugares donde necesita importar esos paquetes en su proyecto. Para obtener más información, consulte: https://github.com/golang/go/wiki/Modules#do-modules-work-with-relative-imports-like-import-subdir


Usuarios de GoLand – por defecto estas formas de importación aparecen como errores en el IDE. Debe habilitar la integración de Go Modules en la configuración

ingrese la descripción de la imagen aquí

Aquí hay otra estructura de proyecto de ejemplo con el contenido del archivo requerido para importar correctamente:

test1/
   utils/
      texts.go
   main.go
   go.mod

con los siguientes contenidos:

go.mod:

module mycompany.com/mytest

go 1.15

utils/texts.go (para que una función sea visible desde un paquete diferente, debe comenzar con una letra mayúscula):

package utils

func GetText() string 
  return "hello world"

main.go (solo se admite el nombre de importación completo, no hay acceso directo para importar desde el mismo módulo más fácilmente):

package main

import (
  "fmt"
  "mycompany.com/test1/utils"
)

func main() 
  fmt.Println(GetText())

Sección de Reseñas y Valoraciones

Nos puedes añadir valor a nuestro contenido contribuyendo tu veteranía en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *