108 lines
1.9 KiB
Markdown
Raw Normal View History

2017-11-10 15:12:24 +00:00
# Code Style
This document is only meant to teach you the code style used in this project and will not explain *why* this coding style is used.
## Tabs vs Spaces
Use **tabs to indent** and **spaces for alignment** only:
```go
type AnimeTitle struct {
Romaji string
English string
Japanese string
Canonical string
Synonyms []string
}
```
## Add an empty line between blocks and other statements
Bad:
```go
func() {
if true {
// Block 1
}
if true {
// Block 2
}
doSomething()
doSomething()
if true {
// Block 3
}
}
```
Good:
```go
func() {
if true {
// Block 1
}
if true {
// Block 2
}
doSomething()
doSomething()
if true {
// Block 3
}
}
```
## Variable names
Variables are written in `camelCase` and should clearly state what they contain, preferably with no abbreviations. Common short names like `id` and `url` are allowed.
Iterator variables in loops are an exception to this rule and can be 1-letter, non-significant variable names, usually `i` and `j`.
## Early returns
Do not wrap a whole function in 1 if-block to check parameters. Use early returns.
Bad:
```go
func DoSomething(a string, b string) {
if a != "" && b != "" {
doIt(a, b)
}
}
```
Good:
```go
func DoSomething(a string, b string) {
if a == "" || b == "" {
return
}
doIt(a, b)
}
```
## Private fields at the end
This is not an absolute rule but try to keep private fields at the end of a struct.
```go
type MyType struct {
PublicA string
PublicB string
PublicC string
privateA int
}
```
## Package names
Package names should be short lowercase identifiers and tests should be written using the black box pattern. Black box testing can be enabled by adding the suffix `_test` to the package names in `*_test.go` files. It will enable you to test your library like it would be used by another developer, without internal access to private variables.