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....
    }