golangのお勉強8


言語の思想を学ぶことを頭の片隅に置いてみるのもいいか。

継承がないことについて

Goに入門してRedis+PostgresなアプリをHerokuにデプロイするまで | WEB EGG
http://leko.jp/archives/763

C++プログラマ向けGo講座 - golang.jp
http://golang.jp/go_for_cpp_programmers

Go言語(Golang) はまりどころと解決策
http://www.yunabe.jp/docs/golang_pitfall.html

そもそも継承はプログラミング言語にあまり必要ない機能だと思います。
リスコフの置換原則のような基本的な原則が守られておらず(そもそも多くの人は名前すら知らない)、
単に一部のコードをクラス間で共有するために継承が使われていて可読性が著しく低いコードもよく目にします。

Goのアンチパターン - GolangRdyJp
http://golang.rdy.jp/2016/07/26/antiptn/

言語の設計思想などと説明したりしてて分かりやすい。

FAQ - golang.jp
http://golang.jp/go_faq

公式の翻訳。この辺をちゃんと調べつつ読み込むと勉強にはなりそう。

仕事の言語に飽きてきた人はGoを使ってみてほしい――『スターティングGo言語』著者が語るGoのパワー:CodeZine(コードジン)
https://codezine.jp/article/detail/9359

迷いつつですが、たとえば序盤のほうでGoの型や演算子の挙動について、かなり細かく書いてみました。PHPやRubyといったスクリプト言語を主に使っている若い方だと、このあたりの知識が抜け落ちていると経験的に感じたからです。せっかく新しい言語を学ぶのですから、型や演算子についてのプログラミングの基礎を復習してもらいたいと思います。

JSでの継承なしのプログラミング

PACアーキテクチャーをつかうパターンを試行してる。
なるほど。でも、具体的にはまだよくわからない。
綺麗に役割分担すればPACの単位で大抵は重複なく実装可能ということなのかどうなのか。
IDEの支援を想定するということは静的解析により依存したコーディングということかしら。
この辺のことをgolangは解決する面があるということか。。

JavaScriptで継承を使わないプログラミングスタイル | Engineer Log
https://engineer-log.net/index.php/2017/05/01/post-1570/

JavaScriptはプロトタイプベースのオブジェクト指向プログラミング言語ではない!? | Engineer Log
https://engineer-log.net/index.php/2017/05/01/post-1569/

Goのオブジェクト指向

なるほど、DDDで聞いたような、細かい粒度のオブジェクトと同じようなことが構造体で実装されるということかな。
それは綺麗だけど大変さはないのか。。
(オブジェクトのリレーションを概念的にどう考えるのか。)
(エンティティとか値オブジェクト的なものを構造体に表現できるのか。)
これは「継承をやめてtraitばっかりにしたよ」とは違うことかしら。

Goはオブジェクト指向言語だろうか? | プログラミング | POSTD
http://postd.cc/is-go-object-oriented/

Goはあえて継承の機能を持たない設計になっています。しかしオブジェクト(構造体の値)が関係を持たないということではありません。Goの開発者は、継承ではなく、関係を表現する別の仕組みを用いるという選択をしたのです。初めてGoを使う場合などは、このせいでGoが使いにくくなっていると思う人も多いかもしれません。しかし実際には、これはGoの最も優れた特性の1つであり、十数年も前から続いている継承に関する問題や議論を解決するものなのです。

オブジェクト指向言語としてGolangをやろうとするとハマること - Qiita
http://qiita.com/shibukawa/items/16acb36e94cfe3b02aa1

Golangも基本的にそのような思想のようです。相手が決まっている場合は、インタフェースとか関係ありません。埋め込みはあくまでも「名前なしでアクセスできるメンバー変数」というシンタックスシュガーと考えるべきです。

実際の実装の形で良さそうだなと思ったやつ

Goに入門してRedis+PostgresなアプリをHerokuにデプロイするまで | WEB EGG
http://leko.jp/archives/763

gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.
https://github.com/gin-gonic/gin

swaggerとの連携

docbookからドキュメントファイルを吐き出すパッケージがあるみたい

golangの開発で使っている色々 - Qiita
http://qiita.com/katsutomu/items/c72d0a7f9d95b7697ef8

yvasiyarov/swagger: Swagger client generator
https://github.com/yvasiyarov/swagger

wantedly/apig: Golang RESTful API Server Generator
https://github.com/wantedly/apig

所感

やっぱり速さが売りで、複雑な継承はLLとはちょっと違って、
丁寧にコストをかければ、たぶん固く組めるけど大変なところもあるかも。
genericは実装しようかなとは思われてる。
くらいか。