タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

ProgrammingとGoとwebに関するkyo_agoのブックマーク (7)

  • Goのインターフェース抽象度を美しく保つ為の思考 - 好奇心に殺される。

    Go Goのインターフェース抽象度を美しく保つ為の思考 Goで抽象化を適切に、そして美しく保つ為の自分の考えやTipsを紹介します。 Overview とある場面でGoのinterfaceが持つ振る舞いの抽象度について議論があり、今回はそれをアウトプットしておきます。Go初心者でinterfaceを使った設計に苦手意識を持つ人向けです。 目次 今回の目次です!下記について自分の考えをお話しします! 振る舞いの抽象化の度合いを意識する 抽象度をどこまであげるか 引数や返り値から発生する「抽象化の漏れ」 抽象度をあげる為の統合 Getter/Setterと抽象度 それではいってみましょう! 振る舞いの抽象化の度合いを意識する 振る舞いをinterfaceとして定義していくのがGoの抽象化ですが、そもそも 抽象化は度合いのある概念です 。この度合いを意識しないと適切なinterfaceの設計は困

    Goのインターフェース抽象度を美しく保つ為の思考 - 好奇心に殺される。
  • Goの正規表現が遅いって言う人がいたから、(速い)正規表現エンジンを作ったよ

    はじめに 「Goの正規表現は遅い」 そんなふうによく言われていました。(最近はあまり聞かなくなりましたが) たとえば、↓の記事ではPythonの正規表現と比較して1.5倍くらい遅いという結果になっています: この話には「Goの正規表現は最悪時間が短くなるように安定したアルゴリズムを採用しているから」という回答があります: ↑の記事の比較では、GoPerlに対して約10倍以上高速という結果が出ているので、「Goの正規表現は遅くない!はい、論破ー!」というわけですね。 なんでこうなるのかも↑の記事で説明されているとおりですが、Perl(などのバックトラック型エンジン)が入力長に対して指数関数的に実行時間が伸びていくのに対し、Goの正規表現エンジンは入力長に対して線形時間で実行時間が伸びていくアルゴリズムを採用しているため、入力が長くなると急激にGoのほうが有利になるからです: 一方で、入力が

    Goの正規表現が遅いって言う人がいたから、(速い)正規表現エンジンを作ったよ
  • RustのgRPCがGoよりも遅い?

    夏のある日、GogRPCが、Rustよりも2倍早いという記事を見つけました。「おいおい、測定ミスだろ」と強がっていましたが、日々、不安は高まっていきます。真実の愛であれば、疑うことは許されませんが、エンジニアの言語への愛など、所詮、状況に応じて使い分けるような打算的な愛。確認してみました。 性能測定結果上記の記事と同じく、gRPCのサーバソフトウェアは、Gogrpc-goRustはtonicのgreeterの性能を、gRPCのクライアントソフトウェアghzを使って、測定しました。ハードウェアは、AWSを利用し、サーバはc5a.8xlarge(32 vCPU/64 GiB)インスタンス、クライアントはc5a.16xlarge(64 vCPU/128 GiB)インスタンスを使いました。 1台のクライアントインスタンスは、同時に3,000個のgRPCクライアントを立ち上げ、合計で6,000

    RustのgRPCがGoよりも遅い?
  • 正しさとGo - Qiita

    はじめに Goの良いところは、最低限の文法を知っていればコードを上から順番に読むことで詳細を容易に理解できることです。 文法の中にシンタックスシュガーや特別な省略が許されていないため多様な表現になることはありません。 そのためGoを書ければGo体と標準ライブラリを読むことができます。 しかし以下の原因により、これらの利点を守ることが難しくなることがあります。 DSL フレームワーク 抽象化 これらは設計として新たな制約を課すことで品質向上や実装を容易にするためのものです。 またこれらを採用する論理立てた 正しい 理由が存在します。 DSL DSLを提供するツールとして、DIのための wire があります。 GoでDIを実現するためには多くの実装を必要とするため、実装量を減らすためにもDIツールが求められてきました。 これは 正しい です。 しかし一方でDSLはコードを読む人間に言語以上

    正しさとGo - Qiita
  • Google Homeを使って4歳児とSlackで会話する方法 - Qiita

    わたあめに捧ぐ(私信) 私の家では、家族の連絡にSlackを利用しています。 Slackはとても便利なのですが、基的にテキストベースのコミュニケーションとなるため、 文字入力ができない幼児には使うことができません。 そこで、Google Homeを活用して、文字入力をせずにSlackで会話するシステムを構築してみました。 イメージは以下のとおりです。 このシステムは、大まかに以下の2つで構成されています。 Slackへの投稿をGoogle Homeがしゃべってくれる仕組み Google Homeに話しかけるとSlackに投稿してくれる仕組み 順を追って説明していきます。 1. Slackへの投稿をGoogle Homeで喋らせるBotの作成 以下のソフトウェアを書きました。 https://github.com/ikasamah/go-slack-google-home Google H

    Google Homeを使って4歳児とSlackで会話する方法 - Qiita
  • 書き直さない時代の気分 - steps to phantasien

    なんとなく続き。(前回) Martin Fowler が蒸し返すまで、 自分は書き直しについてことさら何か書く気が起きなかった。 どうでもよさは時がたつほど増していった。気分の出処を見直してみたい。 部分的に書き直す 最初の理由は、書き直しがゼロかイチかの大きな判断ではないという納得かもしれない。コードの書き換えには様々な粒度がある。一番小さいのが厳密なリファクタリング。一番大きいのがフルスクラッチの書き直し。その間には様々な大きさの書き直しがある。書き直しの粒度が連続的である以上、どちらか一端を擁護する議論は虚しい。 小さい刻みの変更を積み重ねれば危険を冒さず大きな変更ができる。それがリファクタリングのテネットだ。刻みは小さいほど安全だから、良いプログラマは大きな変更を連続した小さい変更へと噛み砕く。変更の難しさに実力が及ばないと刻みが大きくなり失敗の危険が増す。バグが増えたり納期に遅れ

  • ヒカルのGo 資料 Webアプリケーションの作り方

    11. net/httpでWebサーバをたてる package main ! import ( "fmt" "net/http" "log" ) ! func hello(w http.ResponseWriter, r *http.Request) { //fmt.Fprintfでwに入るものがクライアントに出力される fmt.Fprintf(w, "Hello World!") } ! func main() { // アクセスのルーティングを設定する http.HandleFunc("/", hello) // portを指定して起動 err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } } 12. net/httpでWebサーバをたてる packag

    ヒカルのGo 資料 Webアプリケーションの作り方
  • 1