タグ

ブックマーク / golang.rdy.jp (3)

  • Goへの誤解について

    よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事はGoアドベントカレンダー2017 その3の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね? さっさとgoimportsかgoreturnsを保存時に自動実行するエディタ環境を使いましょう。 gofmtも一緒に実行されていいことずくめですよ! インターフェースがnil判定出来ないパターンがあるのダメじゃん? 最初は私もそう思いました。しかし、typed-nilがnilリテラルと比較できなくなったのは 「nil判定サボったままinterface型に変換した」からでサボらなければ全く問題にならないのです。 map,sliceが不便? map,sliceはメソッドが一切ありません。 極論をいうとGoのプリミティブ型みたいなものなのです。 ユーザーが欲しいものはmapやsliceを駆使して各自

  • Goのアンチパターン

    Go書いててなんとなく見えてきた Goでやっちゃいけないパターン WAF導入してらくらくWebアプリ WAF自体が現在群雄割拠状態。 WAF毎にハンドラインターフェースが違うので既存コードつなぐにはラッパーが必要。 どのWAFもLL言語に比べるとまだまだフィーチャーの網羅範囲が狭い。 なのでもちろんLL言語ほど楽には書けないことが多い。 リフレクション使いまくりでトータル性能はLL言語並みに遅いのもある。 Go1.7のcontextパッケージの導入で標準のHTTPハンドラが復権する可能性があり更に荒れる予想。 追記: 楽できるのを期待してWAFを導入するの「やっちゃいけない」とまでは言い過ぎだったかもしれないけれど例のsqlでPrepareを正しく使えていないで性能出なかった件とか、当面WAFを使うなら自分で概ね中身を理解して使う覚悟が必要。 構造体メソッドにロジックを詰め込む Goの思想

  • Goでスケールする実装を書く

    スケールする実装を書くためのガイド スケールするために 並列度とアムダールの法則 べき等参照透過性 Lock-FreeとWait-Free アトミックアクセス ロックの局所化 並列度とアムダールの法則 時間単位の場合は繰り返し処理のトータル時間に対し、 並列処理を妨げない処理時間の割合を「並列度」という。 (コードプロファイルを使って求める場合もあるが、 比較的単純なコードでないと計算が複雑になりやすい。) p 並列度 n 並列数 性能比 1/((1-p)+p/n) p=0.9のとき4倍の性能を得るにはn=6が必要。 n=5で4倍の性能を得るにはp=0.938が必要。 n=無限大とすると、性能比は以下の式におちつく。 理論上の性能向上限界 = 1/(1-p) 並列度90%の処理をどれだけ多数コアに分散しても理論上10倍処理効率が限界。 並列度95%の処理をどれだけ多数コアに分散しても理論上

  • 1