the run programming how golang go packages

run - manual go



¿Tiene sentido tener dos paquetes en el mismo directorio?(golang) (2)

Ok, tengo un proyecto que proporciona una biblioteca (exporta algunas funciones) y también debo proporcionar una interfaz de línea de comandos (debe haber un archivo ejecutable).

Ejemplo de estructura de directorio:

whatever.io/ myproject/ main.go myproject.go

El compilador go necesita el paquete main y func main para iniciar la ejecución. Mi biblioteca necesita el paquete myproject donde pongo cosas en él. Esto es lo que dice la herramienta Ir cuando estoy creando otro proyecto que intenta importar myproject:

main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject

Así que creo que no hay manera de hacerlo.

¿Debo mover la biblioteca o el CLI a otro paquete?


No puede tener dos paquetes por directorio, de ahí el error. Entonces, la solución como @Larry Battle dijo que mueva su myproject.go a un nuevo directorio.

De Cómo escribir código go

El código Go debe mantenerse dentro de un espacio de trabajo. Un espacio de trabajo es una jerarquía de directorios con tres directorios en su raíz:

src contiene archivos de origen Go organizados en paquetes (un paquete por directorio),

pkg contiene objetos de paquete, y

bin contiene comandos ejecutables.


Simplemente mueva sus paquetes dentro de una nueva carpeta dentro del mismo directorio de main.go. Recuerde importar el nuevo paquete de la referencia del $ GOPATH.

Ejemplo:

user@user:~/p/go/test/so-multipack$ ls -R .: a main.go ./a: a.go user@user:~/p/go/test/so-multipack$ cat main.go package main import ( "../so-multipack/a" ) func main(){ a.Hello() } user@user:~/p/go/test/so-multipack$ cat a/a.go package a import ( "fmt" ) func Hello(){ fmt.Println("hello from a") } user@user:~/p/go/test/so-multipack$ go run main.go hello from a user@user:~/p/go/test/so-multipack$ go build user@user:~/p/go/test/so-multipack$ ls a main.go so-multipack user@user:~/p/go/test/so-multipack$

Enlace útil:

ir compilar vs ir compilar file.go