A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Modificadores de acceso en funciones y Structs

22/36
Recursos

Aportes 32

Preguntas 8

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

En mi caso (que lo quise probar manual) tuve mucho el problema 鈥減ackage *** is not in GOROOT (/usr/local/go/src/***)鈥. Lo resolv铆 con go mod init as铆 solito, en la ra铆z de la carpeta del proyecto

Me toco investigar este tema porque no entend铆 lo de los m贸dulos espero les sirva:

Anteriormente en GO se ten铆a que trabajar el c贸digo dentro del GOPATH. Este GOPATH es una de las variables de entorno que declaramos al principio del curso (export GOPATH=$HOME/go) y no es m谩s que la ruta a nuestro entorno de trabajo en donde encontraremos/crearemos la carpeta source que es donde trabajamos todo nuestro c贸digo.

Afortunadamente desde la versi贸n 1.11 podemos realizar nuestros proyectos de Go desde donde queramos gracias a los m贸dulos.

Veamos un ejemplo.

Cree un proyecto llamando 0.0-fundamentals en la siguiente ruta /home/est14/my-own-path/15-go-course/0.0-fundamentals como se puede apreciar estoy fuera de mi GOPATH (/home/est14/go/source).

Ahora cree mi go.mod aqu铆, en la ra铆z de 0.0-fundamentals con el siguiente comando.

go mod init est14/0.0-fundamentals 

Esto me creo el archivo go.mod con el siguiente contenido :

module est14/0.0-fundamentals

go 1.16  // Esta es la version de Go

Luego cree un archivo llamado main.go, al mismo nivel de este cree un directorio llamado greetings, dentro de greetings cree un archivo llamado greetings.go y finalmente cree una funci贸n llamada Hola.

Mi estructura quedo asi:

鈹溾攢鈹 go.mod
鈹溾攢鈹 greetings
鈹 鈹斺攢鈹 greetings.go // Aqu铆 cree mi funcion Hola
鈹斺攢鈹 main.go

Ahora mi intenci贸n era traer la funci贸n llamada Hola que estaba en greetings.go a mi archivo main.go y eso lo hice importando mi paquete 鈥est14/0.0-fundamentals/grettings

//Este es el contenido de mi archivo main.go
package main

import (
	"est14/0.0-fundamentals/grettings"
	
)

func main() {

	greetings.Hola()
	
}

Y listo finalmente pude importar mi paquete y utilizar mi funci贸n Hola. Hay mucho detr谩s de todo esto y ser铆a bueno detenerse un poco aqu铆 ir por un helado luego leer un poco de documentaci贸n y seguir 馃槈.

Aqui como resolvi el tema del paquete:

go run src/main.go

https://faun.pub/golang-package-management-using-go-modules-d3c929900114

Para resolver el problema de cannot find package 鈥渕ypackage鈥 in any of鈥

Pueden intentar importarlo de la siguiente manera

import (
	"fmt"
	mypackage "./mypackage"
)

Go modules nos puede ayudar a evitar un poco el $GOPATH, basta con ejecutar en caso en la carpeta 鈥渟rc鈥:

go mod init "elnombrequequieras"

Y poder usar lo que derive de el, mas informaci贸n:

go modules

En mi caso solucione el proble del GOROOT deshabilitando el mod al modificar una variable de entorno de la siguiente forma

go env -w GO111MODULE=off

鉁 Esto me funcion贸 para resolver el problema al importar y compilar el src/main.go (estoy usando go 1.15.13) . Teniendo la siguiente estructura en mi proyecto:

learngo
鈹斺攢鈹 src
    鈹溾攢鈹 main.go
    鈹斺攢鈹 race
        鈹斺攢鈹 car.go
  1. Inici茅 un module en la carpeta ra铆z del proyecto, en mi caso es learngo, con el siguiente comando:
$ go mod init learngo 

Entonces aparecer谩 un archivo go.mod. El proyecto qued贸 as铆:

learngo
鈹溾攢鈹 go.mod
鈹斺攢鈹 src
    鈹溾攢鈹 main.go
    鈹斺攢鈹 race
        鈹斺攢鈹 car.go
  1. Luego en src/main.go import茅 la struct CarPublic as铆:
package main

import (
	"fmt"
	"goplatzi/src/race"
)

func main() {
	var mycar race.CarPublic

	mycar.Brand = "BENTLEY"
	fmt.Println(mycar)
}

馃惞 De esta forma VSCode dej贸 de marcar errores de importaci贸n y logre ejecutar el main usando:

$ go run src/main.go

En mi caso con el go mod init en la carpeta donde esta el src para importalo ya no fue necesario poner
"curso_golang_platzi/src/mypackage" sino que solo fue con
"curso_golang_platzi/mypackage", usando Go 1.16.4

Solo un pequegno comentario. El no lo menciono durante el video pero este tema aclararia la pregunta de videos anteriores de por que las funciones fmt.Print* comienzan con P mayuscula.

For anyone that want to complie a project in D:\ drive, follow the next steps.

Maybe will need to create a project outside the GOPATH and create packages, but they will not compile outside the GOPATH, to solve that problem, follow the next steps:

  1. Inisde the root directory of the project (the first folder), create a go module with the next command:

    // Create a go module
    go mod init <module name>
    
    // For example
    go mod init gobasic
    

    A file called go.mod will be created. It will contain the next lines of code:

    module <module name> // Example gobasic
    go 1.17 // Go version
    
  2. Create a new directory to save the package file that will import the struct in the main file. Execute:

    mkdir <directory name> && cd <directory name>
    
    // For example
    mkdir mypackage && cd mypackage
    
  3. Create the file of the struc inside the new folder. The struct file must have the first line the name of the directory (folder). For example:

    // The first line must be the name of the directory
    package <directory name created> // For example, mypackage
    
    // Go will ask for the next commen with the name of the struct
    // CarPublic, it's a good practice to make a description
    type CarPublic struct {
    	Brand string
    	Year uint16
    }
    
  4. Return to the root director of the project.

  5. In the main file import the package with the next lines of code

    import <name of the module from of go mod init>/<directory of the package to import>
    
  6. For example the code of the main file will be:

    package main
    
    import (
    	"fmt"
    	pk "gobasic/mypackage"
    )
    
    func main() {
    
    	var myCar pk.CarPublic
    	myCar.Brand = "Ferrari"
    	fmt.Println(myCar)
    }
    
    1. Execute the main file.

al instalarlo go con snap en ubuntu al tratar de usar la exportacion de paquetes me presente con un detalle de 鈥減ackage *** is not in GOROOT (/usr/local/go/src/***)鈥. lo que hice fue ejecutar este copmando go env -w GO111MODULE=off todavia investigo para que es, pero con eso me funciono si alguien puede comentar mas a profundidad de que se trata ese comando seria bueno

si usan intellij esta configuracion les puede servir 馃槃![](

Gracias Juan Camilo por el aporte, se arreglo el problema de :

package curso_golang_platzi/src/mypackage is not in GOROOT (/usr/local/go/src/curso_golang_platzi/src/mypackage)
sin necesidad de editar 鈥済o env鈥, GO111MODULE=" "

La carpeta raiz, es donde esta el 鈥渟rc鈥 donde tienes 鈥渕ain.go鈥, por si eres principiante y rapdio lo ubiques
鈥/curso_golang_platzi/src
ejecutas :
go mod init

  • El nombre del paquete es el nombre de la carpeta.
  • Si el nombre inicia con may煤scula, ser谩 de acceso p煤blico. de lo contrario ser谩 de acceso privado.

Cuando hay problema en la ruta de los paquetes asociados a GOROOT o GOPATH, tambien se puede solucionar con:

go env -w GO111MODULE=off

Esta parte del curso necesita una actualizacion o una aclaracion urgente

No todos estamos usando la misma carpeta que el, en ese caso, tendremos problemas con los import, ya que por defecto, este busca en los archivos de instalacion de go.

Para solucionar esto, hay que usar en la raiz del proyecto

go mod init ruta/modulo

En mi caso, lo cree como test/acceso, asi que el comando queda

go mod init test/acceso

esto creara un archivo go.mod

module test/acceso

go 1.17

module test/acceso es el nombre del modulo que le dimos al comando, guardalo

Luego, supongamos que tengo una carpeta llamada myPackage, y dentro tiene un archivo car.go como este

package car

// CarPublic car con acceso publico
type CarPublic struct {
	Brand string
	Year  int
}

Nota que el package aqui es car, guardalo tambien

Los archivos dentro de la misma carpeta DEBEN tener pertenecer al mismo package

Para usar este archivo, le damos la siguiente ruta al import

"nombre_modulo/ruta"

En mi caso, seria

import (
	"fmt"
	 "test/acceso/myPackage"
)

Para llamarla usa el nombre del paquete, seguido de lo que necesites usar

var newCar car.CarPublic

Tambien podemos usar un alias

import (
	"fmt"
	carPackage "test/acceso/myPackage"
)
//...
var newCar carPackage.CarPublic

Hola!
Si a alguno le aparece 鈥減ackage XXX is not in GOROOT鈥 deben poner en la terminal:

go env -w GO111MODULE=off

para modificar la variable que genera errores debido a una versi贸n anterior a 1.11 del lenguaje

Espero sirva.

Al inicio del curso, espero no errar, el instructor empezo a trabajar en el GOPATH de su m谩quina local.

Yo acabo de recrear el ejemplo usando el valor de la variable GOPATH que se cre贸 por defecto. Utiliz茅 la misma estructura del ejemplo y no me presento error.

Pueden ver si les creo un GOPATH por default mediante go env | grep GOPATH y recrear la estrcutura de directorios del ejemplo: (Ruta o valor de la variable GOPATH)/src/curso_golang_platzi/(Aqui los archivos y directorios del v铆deo) .

Por eso creo que a algunos les da error al generar el subpaquete mypackage estando fuera de la GOPATH , dado que al estar fuera de esa ruta se necesita utilizar m贸dulos para el reconocimiento de los subdirectorios/suboaquetes que se crean a partir de la raiz del proyecto.

Al momento tengo de version go 1.17.3 y yo no inicialize ni configure la variable GOPATH, se gener贸 por default con el valor que apunta en $HOME/go.

Saludos a todos y espero sirva de algo a alguien.

Me sal铆a error diciendo src/main.go:4:2: package curso_golang_platzi/src/mypackage is not in GOROOT (/usr/local/go/src/curso_golang_platzi/src/mypackage)

Lo solucion茅 gracias a @Jonathan Camilo Bernal Aldana colocando el siguiente comando en la terminal:

go env -w GO111MODULE=off

La importaci贸n de paquetes tampoco me funcion贸 usando el GOPATH, lo que hice fue crear una nueva carpeta en mi escritorio llamada go, luego inicialic茅 el modulo con go mod init go. Luego, cree un subdirectorio llamado mypackage y dentro de este cree un nuevo subdirectorio llamado test (mas que nada para saber si es posible llamar funciones que se encuentran dentro de varios subdirectorios)

Aqu铆 el resultado!

Espero les sea de utilidad

La importaci贸n de paquetes tampoco me funcion贸 usando el GOPATH, lo que hice fue crear una nueva carpeta en mi escritorio llamada go, luego inicialic茅 el modulo con go mod init go. Luego, cree un subdirectorio llamado mypackage y dentro de este cree un nuevo subdirectorio llamado test (mas que nada para saber si es posible llamar funciones que se encuentran dentro de varios subdirectorios)

Aqu铆 el resultado

Espero les sea de utilidad

El problema de las importaciones lo arregle agregando las variables de entorno de Go

馃槑

Genial

no me funcion贸 como en el video, por si les funciona de esta manera

import (
	pkg "./Mypackage"
	"fmt"
)

Primer curso en el que he tenido tantos problemas, la extension de go no funciona y ahora no me permite hacer el import, a sido mas googlear que prestar atencion a las clases, desafortunadamente

Tuve muchos problemas con el GOROOT, en los comentarios vi que nos recomendaron crear el modulo en la ra铆z de la carpeta del proyecto con el comando go mod init, sin embargo, si no se desea crear el modulo se puede usar el comando:
GO111MODULE=off go run main.go
Donde 鈥渕ain.go鈥 es el nombre del archivo que se va a ejecutar

Yo tengo dividida mi compu en 2 discos: el del sistema que es C: un disco ssd y un D: disco noramal.
Las carpetas de instalacion de GO estan en C y las del proyecto en D:
Para solucionar el missmatch del paquete solo le di go mod init rutaejemplo dentro de la consola bash de VS code. Para que funcione el cambio tienes que esperar a que la extension te marque un requerimeinto de upgrade o instalacion. Te va a aparecer como la tipica barra de notificacion de VS Code.
A partir de ahi ya todo jala chido. Evidentemente mi ruta de acceso al paquete es rutaejemplo/acceso
Salu2

No me pide que ponga los comentarios en mypackage, capaz es otra version.

El nombre del paquete siempre debe ser el de la carpeta?

Buenos consejos