6 ms·
Well that failed rather misterably package github.com/liamg/traitor/cmd/traitor: mkdir /home/test/go: not a directory Does go assume that you have a directo
by iso1631 6y ago
Well that failed rather misterably
package github.com/liamg/traitor/cmd/traitor: mkdir /home/test/go: not a directory
Does go assume that you have a directory in $HOME that is for it's own personal use?
- axaxs 6y agoYes, that's precisely what it does.
- Filligree 6y agoAnd good luck making it fit in a multi-language project of any kind.
- smokey_circles 6y agowell, no. that's just default behavior. and it's also just for depedencies it downloads. _your_ code lives where you put it
- Filligree 6y agoI spent days, a few years ago, trying to figure out how to do that. When I asked on the IRC channel, they just made fun of me. Perhaps that's changed, but it put me off the language entirely.
- axaxs 6y agoNot just you. I've been using Go for many years, and while I enjoy the language I always found the environment of it awkward and unfriendly. Envvars on top of envvars. Work only in GOPATH, no wait, stop working in GOPATH. Vendor things...no wait don't do that either. I think a lot of it is just growing pains, but it still feels clunky. My system has a .cache folder that everything already uses, why does Go need a special cache?
- tinco 6y agoThey didn't consider it a cache, they consider your gopath to be the place where you put all source code, your own, and that of all your dependencies.
- colejohnson66 6y agoThat seems... a bit much IMO. I personally prefer containerizing things. Such as Node.js’ way with node_modules. Then I can put my project wherever I want. Downloaded dependencies can also go in ~/.cache because I don’t plan on editing them.
- tinco 6y agoEveryone had this experience, that's why after years and years they finally changed that behaviour.
- Groxx 6y agoGo projects using modules are permissive about where you put them (e.g. they don't have to be inside a GOPATH at the right location). It does still use a GOPATH for caching directories though, which seems normal enough. They have to go somewhere, usually declared in some env variable, or they have to have a default location and silently spread files all over. `go get` is not a binary installer, it's a go-project-downloader that happens to also be able to install binaries, so this is IMO expected as it doesn't toss the intermediate products (i.e. a temp folder is not a reasonable choice). As for multi-language projects and conflicting layout needs: oh yeah, that's still terrible. Maybe try Bazel? It can break `go`(the CLI binary)'s rules and build any package from any source files, regardless of their locations. None of that is part of the language spec, `go` is just opinionated and inflexible (probably for simplicity).
- deleted 6y ago[deleted]
- oauea 6y agoNot since 2019: https://blog.golang.org/using-go-modules https://blog.golang.org/using-go-modules The project has to opt into it, which appears to be the case here since there is a `go.mod` file. Are you using a modern version of Go?
- axaxs 6y agoIf you opt into modules, modules get stored in GOPATH. If you don't use modules...source gets downloaded into GOPATH. If GOPATH is unset, it uses ~/go.
- arghwhat 6y ago1. If you opt into modules, $GOMODCACHE is used for go mod downloads. It defaults to $GOPATH/pkg/mod. 2. If you don't use modules, $GOPATH is used. 3. If $GOPATH isn't set, it defaults to ~/go.
- tsimionescu 6y agoActually, modules are still downloaded to a global location, they are not copied locally to your project by default.
- oauea 6y agoWell yes, but most languages have some kind of cache in the home folder.
- tsimionescu 6y agoSo yes, go does "assume that you have a directory in $HOME that is for it's own personal use?"
- spinny 6y agoGo uses $GOPATH to save it's own packages/binaries but uses $HOME/go if $GOPATH is not set. Originally needed $GOPATH to be set, but that changed later
- z3t4 6y agoI guess if it can't write to /home/test your system is safe...
- iso1631 6y agoI have a file - /home/test/go, which consisted of some script I'd knocked up a few months ago
- nonameiguess 6y agoHe obviously wasn't clear enough about this, but if you're just trying to use the tool, download the binary release. Don't use go get as an installer. They're trying to be multi-OS compatible, an autotools that doesn't assume every system has a /usr/local or whatever the Windows equivalent but not assuming everyone has a %USERPROFILE%\AppData\Local\Low\Roaming or whatever. It does assume everyone has a home directory and an environment variable indicating where that is.