A Tour of Go 문제를 풀어보도록 하겠습니다.

17893 단어 GoA_Tour_of_Go

Go


업무상 Go를 해야 할 것 같아요, 공부해야 하는데...
따라서 Go의 시작으로서A Tour of Go.

연습문제만 풀다


Exercise: Loops and Functions

  • 매개변수 제곱근에 근접한 값
  • 을 반환합니다.
    제곱근의 순환 횟수를 구하는 데 10회 고정
  • 매개 변수의 제곱근과 일치할 때의 값과 순환 횟수
  • package main
    
    import (
        "fmt"
        "math"
    )
    
    func Sqrt(x float64) float64 {
        z := 1.0
        for i := 0; i < 10; i++ {
            z -= (z * z - x) / (2 * z)
        }
        return z
    }
    
    func SqrtCount(x float64) (float64, int) {
        z := 1.0
        sqrt := math.Sqrt(x)
        count := 0
        for ; z != sqrt; count++ {
            z -= (z * z - x) / (2 * z)
        }
        return z, count
    }
    
    func main() {
        fmt.Printf("Sqrt : %v\n", Sqrt(2))
        fmt.Printf("math.Sqrt : %v\n", math.Sqrt(2))
        value, count := SqrtCount(2)
        fmt.Printf("SqrtCount : %v(%d回ループ)\n", value, count)
    }
    
    실행 결과
    Sqrt : 1.414213562373095
    math.Sqrt : 1.4142135623730951
    SqrtCount : 1.4142135623730951(5回ループ)
    

    Exercise: Maps


    string에서 전달된 문장의 각 단어의 출현 횟수를 계산하다
    package main
    
    import (
        "golang.org/x/tour/wc"
        "strings"
    )
    
    func WordCount(s string) map[string]int {
        count := make(map[string]int)
        for _, word := range strings.Fields(s) {
            count[word]++
        }
        return count
    }
    
    func main() {
        wc.Test(WordCount)
    }
    
    실행 결과
    PASS
     f("I am learning Go!") = 
      map[string]int{"Go!":1, "I":1, "am":1, "learning":1}
    PASS
     f("The quick brown fox jumped over the lazy dog.") = 
      map[string]int{"quick":1, "brown":1, "jumped":1, "the":1, "The":1, "over":1, "lazy":1, "dog.":1, "fox":1}
    PASS
     f("I ate a donut. Then I ate another donut.") = 
      map[string]int{"another":1, "I":2, "ate":2, "a":1, "donut.":2, "Then":1}
    PASS
     f("A man a plan a canal panama.") = 
      map[string]int{"A":1, "man":1, "a":2, "plan":1, "canal":1, "panama.":1}
    

    Exercise: Fibonacci closure


    반환 반환 피보나치 수를 반환하는 데 사용되는 엔클로저
    
    package main
    
    import "fmt"
    
    func fibonacci() func() int {
        a,b,c := 0,0,1
        return func () int {
            a, b, c = b, c, b + c
            return a
        }
    }
    
    func main() {
        f := fibonacci()
        for i := 0; i < 10; i++ {
            fmt.Println(f())
        }
    }
    
    실행 결과
    0
    1
    1
    2
    3
    5
    8
    13
    21
    34
    

    Exercise: Stringers


    IPADdr형 구현, 출력 IP 주소 작성 시 표시
    package main
    
    import "fmt"
    
    type IPAddr [4]byte
    
    func (i IPAddr) String() string {
        return fmt.Sprintf("%d.%d.%d.%d", i[0], i[1], i[2], i[3])
    }
    
    func main() {
        hosts := map[string]IPAddr {
            "loopback" : {127, 0, 0, 1},
            "googleDNS" : {8, 8, 8, 8},
        }
        for name, ip := range hosts {
            fmt.Printf("%v: %v\n", name, ip)
        }
    }
    
    결과 내보내기
    loopback: 127.0.0.1
    googleDNS: 8.8.8.8
    

    Exercise: rot13Reader


    ROT13 변환 암호
    package main
    
    import (
        "io"
        "os"
        "strings"
    )
    
    type rot13Reader struct {
        r io.Reader
    }
    
    func (rot rot13Reader) Read (b []byte) (int, error) {
        num, err := rot.r.Read(b)
    
        if err != nil {
            return num, err
        }
    
        for i := 0; i < num; i++ {
            if ('a' <= b[i] && b[i] <= 'm') || ('A' <= b[i] && b[i] <= 'M'){
                b[i] += 13
            } else if ('n' <= b[i] && b[i] <= 'z') || ('N' <= b[i] && b[i] <= 'Z') {
                b[i] -= 13
            }
        }
        return num, err
    }
    
    func main() {
        s := strings.NewReader("Lbh penpxrq gur pbqr!")
        r := rot13Reader{s}
        io.Copy(os.Stdout, &r)
    }
    
    결과 내보내기
    You cracked the code!
    

    느끼다

  • 지침이 적혀 있고 여러 개의 값을 반환할 수 있는 등 쓰기 쉬운 부분이 많다.
  • goroutine,channel이 있어 쉽게 쓰고 병행 처리할 수 있다.
  • 번역 속도가 빠르다고 쓰여 있지만 그렇게 빠르지는 않은 것으로 조사됐다.(다른 컴퓨터에서 봤을 때 속도가 빨라서 실행 환경이 안 좋은 것 같아서...)
  • 좋은 웹페이지 즐겨찾기