Added code style
This commit is contained in:
parent
43585b2333
commit
24945da517
108
CODE_STYLE.md
Normal file
108
CODE_STYLE.md
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
# 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.
|
Loading…
x
Reference in New Issue
Block a user