25Nov/090
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/090
「早速 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/090
google goで不要な戻り値は
google goで不要な戻り値は"_"(アンダースコア)で受ければいいらしい。
for _, p := range result.Patch {
とか。
16Nov/091
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扱いになって、
同名のタグを読んでくれる模様。