go-lang + g-languageでスクレイピングしてみた
A Tour of Goを途中でやったはいいものの、入門したっきりでgoを結局全然勉強してなかったので、とりあえず簡単なスクレイピングをしてみようと思って書いた。g-links (http://www.g-language.org/wiki/glinks)というタンパク質や遺伝子に関連する多くの情報を取得できるウェブサービスがあるので、今回はこれを題材に、実践的にコードを書きながら勉強してみた。
という感じになった。FOXP2_HUMANとQ9UPN9という二つのタンパク質の名前と、それに付随するGene ontologyのデータを出力している。
実行すると、
# AltName FOXP2_HUMAN CAG repeat protein 44 # AltName FOXP2_HUMAN Trinucleotide repeat-containing gene 10 protein # GOslim_component GO:0005737 cytoplasm # GOslim_component GO:0043234 protein complex # GOslim_function GO:0001071 nucleic acid binding transcription factor activity # GOslim_function GO:0003674 molecular_function # GOslim_function GO:0003677 DNA binding # GOslim_function GO:0008134 transcription factor binding # GOslim_function GO:0043167 ion binding # GOslim_process GO:0008150 biological_process # GOslim_process GO:0009790 embryo development # GOslim_process GO:0040007 growth # GOslim_process GO:0048856 anatomical structure development # GOslim_process GO:0050877 neurological system process --- # AltName TRI33_HUMAN Ectodermin homolog # AltName TRI33_HUMAN RET-fused gene 7 protein # AltName TRI33_HUMAN Transcription intermediary factor 1-gamma # AltName TRI33_HUMAN Tripartite motif-containing protein 33 # GOslim_component GO:0005654 nucleoplasm # GOslim_function GO:0003677 DNA binding # GOslim_function GO:0016874 ligase activity # GOslim_function GO:0043167 ion binding # GOslim_process GO:0007165 signal transduction # GOslim_process GO:0008150 biological_process # GOslim_process GO:0009058 biosynthetic process # GOslim_process GO:0034641 cellular nitrogen compound metabolic process ---
のようにスクレイピングした結果が得られる。
今日、初めてまともな機能をもつgoのコードを書いてみて感じたことは、
- 引数や返り値の型をちゃんと意識しないといけなくて、例えば引数が
[]byte
なのか[]string
で戸惑う - なんかコンパイル後のバイナリのサイズがでかい
- 自分で定義した関数でbetterなerrorの返し方が分からない
- 沢山かいて慣れろ
ということくらいか。
まとめると、HTTPアクセスの仕方、正規表現の書き方、簡単な文字列の操作が分かってきた。今度は、methodとかinterfaceを勉強する。