Coming from Python and more recently NodeJS I’ve come to appreciate tools like npm that allow you to easily manage all your project’s dependencies into specific vendor directories or environments to prevent issues where one project requires one version of a library while another might need something different.
In Go this becomes especially important because the whole versioning- issue has not been solved here yet. So “vendoring” is actually the recommended approach and rather simple to pull off by specifying a GOPATH for each project. Simple but tedious. That’s pretty much where godep comes into play:
godep
is a small tool that you can wrap all your go
calls around to work
on a project-specific $GOPATH
. Since I only started working with it a couple of
days ago, I’m still not completely sure if I’ll use it for every project and
how deeply I will integrate it into my toolchain. That being said, this is how
far I’ve got.
Oh, and I know about gom, but simply haven’t had yet the time to look into it yet. godep simply came first for me :)
How to integrate it with GoSublime
For this you will have to have a SublimeText project set up for every project where you want to use godep. The settings here are rather minimal since GoSublime allows you to change the environment variables used for it’s go subprocess:
{
"settings": {
"GoSublime": {
"env": {
"GOPATH": "$HOME/path/to/your/project/Godeps/_workspace"
}
}
},
"folders":
[
{
"follow_symlinks": true,
"path": "."
}
]
}
As a quick helper you can get the GOPATH godep would use internally by running
godep path
in your project’s directory. I’m not yet all that happy about
having to put an absolute path in here, but given Go’s tendency to absolute
import paths it feels at least consistent :)
How to integrate it with GoConvey
For testing I really like goconvey which provides a webinterface to the current state of coverage and test execution. That webinterface is started by a commandline tool that let’s you specify which go binary should be used for running the tests and determining the coverage. This is also where I thought I might be able to inject godep into the process.
At first I thought I could just set the -gobin
parameter to something like
godep go
and be done with it. Sadly, this doesn’t work because the flag really
requires one file. But that’s what short shell scripts are good for:
#!/bin/sh
exec godep go $@
I put this onto my $PATH
and all of a sudden all I have to do is start
goconvey like this:
$ goconvey -gobin='godepgo'
This seems to work pretty much as expected so far. And if it stays that way I will most likely roll that setup out to other projects.
Do you want to give me feedback about this article in private? Please send it to comments@zerokspot.com.
Alternatively, this website also supports Webmentions. If you write a post on a blog that supports this technique, I should get notified about your link π