golangを始めて2ヶ月経つ。
毎日朝から晩までというわけではなく、週2回触る程度。
普段から「どんな言語でも2週間くらいで本番に入れる」などと豪語していたのだが、これは言語本体であってフレームワーク、ライブラリーは含んでいない。
さて、所感だがPHPやJavaとは全く別物、pythonやjsとも何の共通性もないということで、静的型付け感が全開で出ているクセのある言語だと思っている。
golangが使い心地が良い人はC言語系に慣れ親しんでいる「まともな」プログラマーだろう。
自分の場合「スクリプター」「コーダー」と呼ばれても仕方がない。
それは良いとして・・・
ポインタは理解できるが、「なぜここでポインター?なぜここで値渡し??」というような事に出くわすことが多く、日々戸惑っている。
型にうるさいのは仕方ないとして、interface{} みたいな変な型があって使いこなしが難しい。
あと関数の引数にデフォルト値が設定できないのは地味に面倒。
とにかく色々な場面でぶつかりまくってサクサクという訳には行っていないのが現状。
メリットとしては、今さらC言語なんかを持ち出したくない場面でその代替として使えそう。
それからサーバではnode.jsの代わりに使えそう。並行処理はjsより分かりやすいと思う。
何より速いのが良い。静的型付けは一つくらい出来ておかないと、というのがありCやC++も考えたが学習時間取られそうなので、golangが出来ればカバー範囲は広がるだろう。
ただポインタ演算したい時はgolangでは対応できないらしい・・・ネイティブで動かす画像処理とかダメっぽいですね。
じゃRustあたりでも、ということになるが、これはこれで結構大変らしいし、Web屋としては仕事に結び付かない。
まあ、快適とは言い難いが、思い付きをコード化しやすい言語だと思うし、現場も増えているし、速いコードを作りたい時もあるので、何とかマスターしたいと思っている。
とりあえず今気を付けているのは、PHPやPython、Javaなどとは土壌の異なるレベルで動いているという意識を持つ事だ。言うまでもなく、広大なメモリ空間が広がる土壌でのコンピューティングをしているということ。
その後
まずはjsonでハマった。
json.UnmarshalなんてJSON.parse みたいなもんかなと思ったら大ハマり。
動的言語ではないので当然とも言えるが、受け取るデータ構造に応じた構造体を準備しなければいけない。
やっかいなのが
・ネストしたデータ構造の場合
・入ってくるデータ型が不定(intかstringみたいな=>お手上げ!)
・golang側の型がunsignedの場合
型の問題は、structのアノテーションである程度解決できるが、uint<-intなどは出来なかった。そもそもjson側では負の数は表現できないので暗黙的にuintだと思うのだが。int<-stringは出来る模様。
ネストしている場合は複数の構造体を組み合わせる。
複雑なAPIレスポンスでは大変!300項目もあるような商用APIの場合ぶっ倒れそう・・・
まあ、勝手なオブジェクトを生成するjsやPHPのjsonパースの方が危険っちゃ危険なんだが、やはり便利。生産性が高い。JavaのJacksonなんかも同様みたい。
動的言語と静的言語、というか非オブジェクト指向言語、当たり前だが考え方を変えないといけないようだ。決して楽ではない。