25Nov/09Off
goのhttpでproxy, oauth
httpパッケージのソース見れば解かるけど直接接続しかサポートしてない。
パッチ書こうかと思ってたけど。
流石、既に有るのね。
Issue 154042: Add rudamentary HTTP Proxy support to the http pkg.
twitterのOAuth用のパッケージも有ったりw
montsamu's go-twitter-oauth
example は 実行しておいて ポート:8080 にブラウザでアクセスするんだけど、
sessions/ tokens/ static/ っていうディレクトリが無いと落ちるので要注意。
17Nov/09Off
「早速 Go言語を試してみる!」をgoで書き直してみた
まぁ、あれだけどこんな感じ。
amachangのところで書かれていたTwitterのpublic timeline拾ってくるサンプル。
早速 Go 言語を試してみる!
jsonもUnmarshalでxmlと同じように拾ってこれる。
とか、かなりgoっぽく書き直してみた。
Unmarshalは必要な要素だけでOKっぽいので使いやすい。
Linux/386, osx10.6.2/386で動作確認済み。
package main import ( "json"; "http"; "io"; ) type User struct { Screen_name string; } type Tweet struct { User User; Text string; } type Tweets struct { Tweet []Tweet; } func main() { if r, _, err := http.Get("http://twitter.com/statuses/public_timeline.json"); err == nil { if b, err := io.ReadAll(r.Body); err == nil { var tweets Tweets; json.Unmarshal( "{ "tweet": " + string(b) + "}", &tweets ); for _, tweet := range tweets.Tweet { print( tweet.User.Screen_name + " : " + tweet.Text + " " ); } } } }
17Nov/09Off
google goで不要な戻り値は
google goで不要な戻り値は"_"(アンダースコア)で受ければいいらしい。
for _, p := range result.Patch {
とか。
16Nov/09Off
google go::xmlの読込み
っていうか思いっきり間違ってるかもだけど。
<?xml version="1.0" encoding="UTF-8"?> <binchg version="1.0"> <target></target> <patch> <name>cpumodel is always 0x0e i386</name> <org>0fb60569958700 83e80d 3c21</org> <mod>0fb60569958700 31c040 3c21</mod> </patch> <patch> <name>cpumodel is always 0x0f x86_64</name> <org>0fb60566e24900</org> <mod>b80f0000009090</mod> </patch> </binchg>
なxmlをgoで読み込みたい場合、
type Patch struct { Name string; Org string; Mod string; } type Binchg struct { Target string; Patch []Patch; }
と、定義しておいて、
var result Binchg; xml.Unmarshal( patch_file, &result ) ;
で、OKっぽい。type定義の変数名を大文字で始める事でpublic扱いになって、
同名のタグを読んでくれる模様。