Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does it make sense to have two packages in the same directory?

Tags:

package

go

I have a project that provides a library (exports some funcs) and also must provide a command-line interface (there must be an executable file).

Example of directory structure:

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

The go compiler needs the package main and func main to start execution. My library needs the package myproject where I put stuff on it. This is what the go tool says when I am building another project that tries to import myproject:

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

So I believe there is no way to do it.

Should I move the library or the CLI to another package?

like image 460
xrash Avatar asked Dec 06 '13 15:12

xrash


Video Answer


1 Answers

Just move your packages inside a new folder within the same directory of main.go. Remember to import the new package from the reference of the $GOPATH.

Example:

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$  

Useful link:

go build vs go build file.go

like image 124
Larry Battle Avatar answered Oct 19 '22 18:10

Larry Battle