yukke::note

technical note

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を勉強する。