go,effective-go
go를 사용하는 best practice는 무엇일까?
go 소스 코드를 공부한다. go는 go( +c )로 만들어졌다. (실제로 추천하신 분이 계심.. 흠.. 말은 쉽긴한대..)
owner := obj.Owner()
if owner != user {
obj.SetOwner(user)
}
if new line comes after atoken that could end a statement, insert a semicolon
if x >0 {
return y
}
if err := file.Chmod(0554); err != nil {
log.Print(err)
return err
}
f, err := os.Open("data")
d, err := f.Stat()
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
for key, value := range oldMap {
newMap[key] = value
}
a := []int{1, 2, 3}
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
a[i], a[j] = a[j], a[i]
}
func unhex(c byte) byte {
switch {
case '0' <= c && c <= '9':
return c - '0'
case 'a' <= c && c <= 'f':
return c - 'a' + 10
case 'A' <= c && c <= 'F':
return c - 'A' + 10
}
return 0
}
func (file *File) Write(b []byte) (n int, err error)
func nextInt(b []byte, pos int) (value, nextPos int) {
func ReadFull(r Reader, buf []byte) (n int, err error) {
for len(buf) > 0 && err == nil {
var nr int
nr, err = r.Read(buf)
n += nr
buf = buf[nr:]
}
return
}
// Contents returns the file's contents as a string.
func Contents(filename string) (string, error) {
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close() // f.Close will run when we're finished.
var result []byte
buf := make([]byte, 100)
for {
n, err := f.Read(buf[0:])
result = append(result, buf[0:n]...) // append is discussed later.
if err != nil {
if err == io.EOF {
break
}
return "", err // f will be closed if we return here.
}
}
return string(result), nil // f will be closed if we return here.
}
func trace(s string) { fmt.Println("entering:", s) }
func untrace(s string) { fmt.Println("leaving:", s) }
// Use them like this:
func a() {
trace("a")
defer untrace("a")
// do something....
}