カテゴリー別アーカイブ: go

GO言語を触ってみた

GO言語を触ってみた。 http://golang.jp/

試しに標準入力からファイルを読み込んで出力するプログラム

package main

import (
        "bufio"
        "fmt"
        "log"
        "os"
)

func main() {
        scanner := bufio.NewScanner(os.Stdin)
        for scanner.Scan() {
                fmt.Println(scanner.Text())
        }
        if err := scanner.Err(); err != nil {
                log.Fatal(err)
        }
}

BOMや改行コードCRはスキップされるので簡易正規化に使えるかもしれない。
引数に指定したURLの内容を出力する。

package main

import (
    "flag"
    "fmt"
    "io/ioutil"
    "net/http"
)

func getContent(url string) (body []byte, err error) {
    resp, err := http.Get(url)
    if err != nil {
        return
    }

    defer resp.Body.Close()
    body, err = ioutil.ReadAll(resp.Body)
    return
}

func main() {
    flag.Parse()
    url := flag.Arg(0)
    content, err := getContent(url)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(content))
}

JSONとかに渡して何かできそうな気もする(けど今はあまりモチベーションないや)

svn log --xmlの結果を受け取る

package main

import (
        "encoding/xml"
        "fmt"
        "log"
        "os/exec"
)

type Data struct {
        XMLName xml.Name `xml:"log"`
        Entry   []Entry  `xml:"logentry"`
}

type Entry struct {
        Revision int    `xml:"revision,attr"`
        Author   string `xml:"author"`
        Date     string `xml:"date"`
        Message  string `xml:"msg"`
}

func main() {
        xmlFile, err := exec.Command("/usr/bin/svn", "log", "--xml").Output()
        if err != nil {
                log.Fatal(err)
        }
        var data Data
        xml.Unmarshal([]byte(xmlFile), &data)
        for index := range data.Entry {
                fmt.Printf("%#v\n", data.Entry[index])
        }
}

スクリプト言語の気軽さがあるコンパイル言語だけど、イマイチまだ使いどころが見いだせないでいる。

この言語でなければならないという確固たる理由が今のところないからだ。この先、書いてて気持ちよくなるかどうかにかかっているなあ。