I'm still trying to get my head around the Go workspace layout. I have a package, todinfo
and a sample program which uses it, untod
.
I currently have this arrangement of directories:
$GOPATH
+- bin...
+- pkg ...
+- src
+- github.com
+- longborough
+- (others)...
+- todinfo
+- todinfo.go
+- untod.go
I originally developed these two programs in separate directories. However, since untod
is really part of the todinfo package, it seems more sensible to package it up as a single project, in the same directory.
But when I try to install (I've wrapped the reply onto three lines for clarity):
D:\Development\Go\src\github.com\longborough\todinfo>go install
can''t load package: package github.com/longborough/todinfo:
found packages todinfo (todinfo.go) and main (untod.go)
in D:\Development\Go\src\github.com\longborough\todinfo
I hope I'm mistaken, but this smells a bit like Java, at least to the uninitiated.
What am I doing wrong? What Go commands should I use to install the package and then install the sample? Or, what is the correct directory arrangement?
This got me too. Think of it this way: untod
is not part of the todinfo
package, it's a consumer of the todinfo
package (library). In fact, main
is not really a package at all, just a marker to say that it's got an entrypoint and should be compiled into a binary.
TLDR: you can put untod
anywhere. In the root is probably sensible: it will then be named whatever the last dir component of your $GOPATH
is. Alternatively, put it in cmd/untod/untod.go
if you've got multiple binaries.
After some more development, you might consider making a separate repo like github.com/longborough/todinfo-bins
to keep them apart.