goauth2 インストール時のエラーについて #golang
Go言語のauth2ライブラリ、goauth2をインストールしようとしたらエラーになったのでメモ。
go get したら以下のエラーが発生。
% go get code.google.com/p/goauth2/oauth go: missing Mercurial command. See http://golang.org/s/gogetcmd package code.google.com/p/goauth2/oauth: exec: hg: executable file not found in $PATH
Mercurial を使用しているらしくそれがインストールされていないため、エラーになっていたようです。Mercurialをインストールしたら無事 goauth2 が入りました。
Go言語でのJSONデータ読み込みについて #golang
Go言語でのJSONデータをパースするにはencoding/jsonパッケージのUnmarshalを使います。
XMLの時と同じように、struct定義にjsonデータをマッピングさせることができます。またjsonが階層になっている場合は、下位の構造をstruct定義して、上位側でそのstruct型を定義します。サンプルデータは、Weather Hacksのデータを一部抜粋したものを使用しました。
package main import ( "encoding/json" "fmt" "log" ) const data = ` { "date": "2013-11-06", "dateLabel": "明日", "telop": "晴れ", "temperature": { "max": { "celsius": "19", "fahrenheit": "66.2" }, "min": { "celsius": "13", "fahrenheit": "55.4" } } } ` type JsonData struct { Date string `json:"date"` Datelabel string `json:"dateLabel"` Telop string `json:"telop"` Temperature Temperature `json:"temperature"` } type Temperature struct { Max Max `json:"max"` Min Min `json:"min"` } type Max struct { Celsius string `json:"celsius"` Fahrenheit string `json:"fahrenheit"` } type Min struct { Celsius string `json:"celsius"` Fahrenheit string `json:"fahrenheit"` } func main() { jd := new(JsonData) err := jd.JsonProc() if err != nil { log.Fatalf("Log: %v", err) return } fmt.Printf("%v %v: %v 最高気温:%v 最低気温:%v\n", jd.Date, jd.Datelabel, jd.Telop, jd.Temperature.Max.Celsius, jd.Temperature.Min.Celsius) } func (p *JsonData) JsonProc() (err error){ err = json.Unmarshal([]byte(data), &p) if err != nil { return err } return nil }
Go言語の Array ライブラリを書いてみた #golang
golang やってます。がしかし ruby をやり始めたころより進みがよくありません。コンパイルエラーで悩んだり等々。
Go言語の組み込みパッケージは充実してるのですが、配列(Array)のライブラリはないので(githubにはあると思いますが)、さくっと直感的に処理を書くことができません。
ということで、Go言語の勉強のために、int用のArrayモジュールを書いてみました。まあそれスライスでやればいいやん、というのもありますが、それは勉強ということで。
使い方は、README.md にあるように、ruby の Array のメソッドっぽく書けます。
import ( "github.com/ramtiga/go-array" ) arry := array.IntArray{1, 2, 3, 4, 5} arry.Length() // returns => 5 arry.Push(6) // arry => {1, 2, 3, 4, 5, 6} arry.Pop() // arry => {1, 2, 3, 4, 5} arry.First() // returns => 1 arry.Last() // returns => 5 arry.Shift() // arry => {2, 3, 4, 5} // other methods // Unshift, Concat, Clear, Delete, Delete_at, // Index, Index, Reverse, Join, Uniq, Sort
テストもこれくらいなら簡単だったので書いてみた。Push のテストは以下のような感じ。
// Push func TestPush(t *testing.T) { var d IntArray = IntArray{5, 3, 1, 2, 6} chk := IntArray{5, 3, 1, 2, 6, 7} d.Push(7) for i, _ := range d { if d[i] != chk[i] { t.Errorf("result=%v, index=%v", d, i) } } }
新しい言語は、とにかく書いて覚えるしかないかなと。
enjoy #golang!!!
Go言語で RSS Feed を取得する
Go言語を最近やっているがまだまだわからないことが多い。とりあえず簡単そうなとこでRSSを取得して表示するものを書いてみた。
RSSはlivedoorの Weather Hacks を利用した。
処理の流れ
- net/http の http.get でXMLデータを取得。
- http のレスポンスデータを io/ioutil の ReadAll に渡す。
- 取得するデータを struct 定義して encoding/xml の Unmarshal に渡す。
package main import ( "fmt" "encoding/xml" "net/http" "io/ioutil" "log" ) var FEED_URL string = "http://weather.livedoor.com/forecast/rss/area/130010.xml" type WeatherHack struct { Title string `xml:"channel>title"` Description []string `xml:"channel>item>description"` } func main() { wh, err := getWeather(FEED_URL) if err != nil { log.Fatalf("Log: %v", err) return } fmt.Println(wh.Title) for n, v := range wh.Description { if n > 0 { fmt.Printf("%s \n", v) } } } // Get Weather Hacaks func getWeather(feed string) (p *WeatherHack, err error) { res, err := http.Get(feed) if err != nil { return nil, err } b, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } wh := new(WeatherHack) err = xml.Unmarshal(b, &wh) return wh, err }
実行結果
$ go run go-weather-xml.go 東京都 - 東京の天気 - livedoor 天気情報 29日(火)の天気は曇時々雨、最高気温は16℃ でしょう。 30日(水)の天気は晴時々雨、最高気温は23℃ 最低気温は14℃でしょう。 31日(木)の天気は晴時々曇、最高気温は21℃ 最低気温は13℃でしょう。 01日(金)の天気は晴時々曇、最高気温は21℃ 最低気温は13℃でしょう。 02日(土)の天気は晴時々曇、最高気温は21℃ 最低気温は13℃でしょう。 03日(日)の天気は曇時々晴、最高気温は23℃ 最低気温は15℃でしょう。 04日(月)の天気は晴時々曇、最高気温は21℃ 最低気温は15℃でしょう。
Vim の VTreeExplore で隠しファイルを表示する
VTreeExlore で隠しファイルを表示する方法をメモ。ドキュメントに書いてあった。
.vimrc に以下を記述する。
let g:treeExplHidden = 1
Vim で実行する ruby のバージョンについて
Vim 上で ruby を単純に実行するには、:!ruby % を実行すればよいのですが、たまたま Nokogiri でエラーがでてしまった。
`require': no such file to load -- nokogiri (LoadError)
ターミナルから、ruby hoge.rb は実行できているのに。Vim で ruby のバージョンを確認すると
ruby 1.8.7 だった。rbenv で設定している バージョンが指定されていないようだ。
ググってもなかなか見つからない情弱orz.. やっと見つけた以下の記事。
VimからrbenvのRubyが呼び出せない問題が発生してハマった
感謝です! .zshrc にあった以下の記述を、.zshenv に書かないといけないみたい。
if [ -d ${HOME}/.rbenv ] ; then PATH=${HOME}/.rbenv/bin:${PATH} export PATH eval "$(rbenv init -)" fi
source ~/.zshenv して再度バージョンを確認すると
rbenv で設定しているバージョンが指定されました。
開発環境
homebrew での Vim インストール
Mac を Mountain Lion にアップデートして Vim を再インストールしたのでメモ。インストールしたバージョンは 7.3.682。
homebrew でのインストール
以下の記事の通りにインストールする。パッチの数が多いので多少時間がかかる。
Homebrew の Vim formula 書いた – Yarukidenized:ヤルキデナイズド
$ brew install https://gist.github.com/uasi/721952/raw/843b390acb9f86226133ce3e94ed99ee485c494f/vim.rb --enable-interp=ruby --force ・・・ ==> ./configure --disable-gui --without-x --disable-gpm --disable-nls --with-tlib=ncurses --enable-multibyte --prefix=/usr/local/Cellar/vim/7.3.682 --mandir=/usr/local/Cellar/vim/ ==> make install 🍺 /usr/local/Cellar/vim/7.3.682: 1233 files, 21M, built in 21.1 minutes
インストール先と ruby の確認
$ which vim /usr/local/bin/vim $ vim --version | grep ruby -python -python3 +quickfix +reltime -rightleft +ruby +scrollbind +signs Linking: cc -L. -L/usr/local/lib -o vim -lm -lncurses -liconv -framework Cocoa -lruby -lobjc
vi コマンドで vim を実行したいので .zshrc に alias を設定する。
alias vi='/usr/local/bin/vim'