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]) } }
スクリプト言語の気軽さがあるコンパイル言語だけど、イマイチまだ使いどころが見いだせないでいる。
この言語でなければならないという確固たる理由が今のところないからだ。この先、書いてて気持ちよくなるかどうかにかかっているなあ。