RADL ひよっこエンジニアの備忘録 2年目 奮闘記
reddit.epicplugins.com 
want to join? in seconds

Go言語始めてみました。

プログラミング初心者がGo言語を始めてみました。

んー・・・他のプログラミング言語と比べて情報量が少ないというのが第一印象ですかね。
とりあえず、Goを使う時の最大の利点はGoルーチンらしいので、これをしっかりマスターします。

その後、色々(MVCモデルのrevelとか、goqueryによるwebスクレイピングやら、コマンドラインツールの作成やら)やっていこうと思います。

Goルーチン

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    urls := []string{
        "http://example.com",
        "http://example.net",
        "http://example.org",
    }
    for _, url := range urls {
        res, err := http.Get(url)
        if err != nil {
            log.Fatal(err)
        }
        defer res.Body.Close()
        fmt.Println(url, res.Status)
    }
}

上記コードのイメージ図
screenshot.147

func main() {
    urls := []string{
        "http://example.com",
        "http://example.net",
        "http://example.org",
    }
    for _, url := range urls {
        // 取得処理をゴルーチンで実行する
        go func(url string) {
            res, err := http.Get(url)
            if err != nil {
                log.Fatal(err)
            }
            defer res.Body.Close()
            fmt.Println(url, res.Status)
        }(url)
    }
    // main()が終わらないように待ち合わせる
    time.Sleep(time.Second)
}

上記コードのイメージ図
screenshot.148

func main() {
    urls := []string{
        "http://example.com",
        "http://example.net",
        "http://example.org",
    }
    statusChan := make(chan string)
    for _, url := range urls {
        // 取得処理をゴルーチンで実行する
        go func(url string) {
            res, err := http.Get(url)
            if err != nil {
                log.Fatal(err)
            }
            defer res.Body.Close()
            statusChan <- res.Status
        }(url)
    }
    for i := 0; i < len(urls); i++ {
        fmt.Println(<-statusChan)
    }
}

上記コードのイメージ図
screenshot.149

コメントを残す