docs/go-cheatsheet.md

64 lines
1.3 KiB
Markdown

# go (golang) cheatsheet
![gopher](/sneak/docs/raw/branch/master/img/gopher.jpg)
## external
* awesome-go list of tools: [avelino/awesome-go](https://github.com/avelino/awesome-go)
## tools and environment
goimports manages your import lines and should be used instead of fmt, golangci-lint will tell you when you're doing silly things, and gotest will do the same thing as `go test` but with color output in terminal.
```
go get golang.org/x/tools/cmd/goimports
go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.31.0
go get -u github.com/rakyll/gotest
```
## code style
* obviously, always gofmt
* run golangci-lint
## types and interfaces
Accept and provide `String() string` method and the associated `fmt.Stringer` interface.
Accept and provide `GoString() string` method so `%#v` (see below) works right.
## testing
### use testify
```
import "github.com/stretchr/testify/assert"
func TestSomething(t *testing.T) {
a := assert.New(t)
thing, err := functionCall()
t.Logf("%#v", thing)
a.NotNil(err)
}
```
### use %#v
``` go
t.Logf("%#v", eim)
```
Outputs types with keys, viz:
```
inner_test.go:17: &message.InnerMessage{
ours:(*message.InnerJSONStruct)(nil),
dstPubKey:(*cbk.CryptoBoxKey)(nil),
srcPrivKey:(*cbk.CryptoBoxKey)(nil)}
```