michiはGo 1.22のEnhanced ServeMuxに合わせて設計された設計されたルーティングライブラリです。 以下で試すことができます。 機能 net/httpと100%の互換性 - http.ServerMux, http.Handler and http.HandlerFunc Enhanced http.ServeMux - Go 1.22からHTTP Methodの指定とPathValueの取得ができます。 chiのようなインターフェース - Route, Group, With and chi middlewares 外部パッケージへの依存はありません - 標準packageのみを利用しています 軽量 - コードは160行以下です。 michiはHandlerのセットアップだけをサポートしており、ルーティング機能はhttp.ServeMuxへ委譲します。 パフォーマン
はじめに どうも @convto です。 以前に protobufのwire encodingについて遊んた ことや gobについていろいろ仕様を調べて遊んだ こととかがあったので、いっちょいい感じの比較ができるんではということでやっていきたいと思います。 ついでにgobについては 当時のモチベを調べたりもしたことある のでそのへんもおまけ程度に言及しつつ、こういうときにgobつかえそうだよ〜みたいなのをまとめてみます。 比較するのは json protobuf(wire) gob です。おもな観点はバイナリ効率ですが、それぞれのエンコーディングのメッセージの互換性やら、周辺エコシステムの広がりも含めて評価できればと思います。 ちなみにバイナリの比較についてはせっかくなので稚作の↓をつかってます。そこそこ便利なので用途に合う方はぜひ愛でてあげてください github.com これは Go
Go言語プログラミングエッセンス エンジニア選書 作者:mattn技術評論社Amazon 『Go言語プログラミングエッセンス』、C言語の勉強に役立つなぁ(?)— magnoliak🍧 (@magnolia_k_) 2023年3月11日 普段、Go言語のコードを書くことは無いのだけど、ざっと読むくらいのスキルは身につけておきたいなーと思って、『Go言語プログラミングエッセンス』を読み始めた。 単に言語の仕様とか、ツールの使い方を知りたいだけならば公式ドキュメントを読んで、他の人のコードを読んで、実際に書いてみればいいのだけど、この本ではしつこいくらいに、「他の言語との比較」や、「仕様が決まった背景」が語られている。 変数や関数の定義の記述順に関しては、わざわざC言語の構文解析の難しさを図を使ってまで説明した上で、「一方、Go言語ではこうなっている」と説明されてとても分かりやすかった。 この
何 Interfaceの2024年2月号で自作のIPv6専用ルータがc++で実装されており、これをgolangで再実装してみた。 事前学習 本編に入る前に、必要な前提知識を書いておく。 詳細はInterface2月号に丁寧な説明があるので(ぜひ購入してみてください)、ここではキーワードだけ記載する。 ネットワークの基礎知識 インターネットの階層構造 TCP/IPのパケットの構造 イーサネットフレーム ネットワークコマンドの基礎 ipコマンド関連 tcpdump IPv6 IPv4と比較 近隣探索(NA、NDパケット) ICMPv6 チェックサムと擬似ヘッダ NDテーブル パトリシアトライ木 linux関連 epoll ファイルディスクリプタ 本編 実装はgithubで公開している。 宛先のNDテーブルとフォワーディングテーブルが存在する場合のフローチャート。 NDテーブルを探索して見つから
こんにちは。 もう、Webの開発を何年もやってきたのになと思うのに、まだまだ理解できてなかったことがあるんだなぁと日々痛感させられてるmasamikiです。 GraphDB こないだ GoのORM「ent」の話 を書かせてもらったのですが、GraphQLを使う仕事も結構でてきたなと。 さてさて、同じGraphの名を冠するGraphDBとはなんでしょうか。 Graph自体はentでMySQLに対して表現していたように、DBによらず、そのデータ構造のモデルを作ることは難しくありません。 この記事の言葉をかりると Graph DBとは、index-freeな隣接する頂点を取得できるストレージシステムなら、それをGraphDBと呼べるそうです。 もうちょっと細かい定義としては、(といっても翻訳してるだけですが) すべての要素(つまり、頂点またはエッジ)には、隣接する要素への直接のポインタがある。
BigQuery Emulator の v0.6.0 をリリースしました。 今回のリリースでは、Recidiviz社 の @ohaibbq さんが多大な貢献をしてくださいました。Recidiviz社ではかなり前から BigQuery Emulator を使ってくれているようで、以前から Issue や DM などでそのことを伝えてくれていましたが、@ohaibbq さんが今Qエミュレータの改善にコミットできるということで、 Recidiviz社側で fork して使っていたものに加えていた patch をたくさん送ってくれました。 かなり多くの改善が入っているので、以前エミュレータを試して動かなかったクエリを再度試す良い機会かなと思っています。 @ohaibbq さんからは、嬉しいことに今後も貢献してくださると言っていただけているので、今後の改善も速いペースで進んでいくと思います。素晴らし
O'REILLY の『Go言語でつくるインタプリタ』が良かったので、続きの洋書『WRITING A COMPILER IN GO』 もやってみたGoコンパイラ この記事は Go Advent Calendar 2022 カレンダー 2 の 21 日目の記事です。 『WRITING A COMPILER IN GO』という書籍を読んでコンパイラを作ってみたので、その書籍について紹介します。 『Go言語でつくるインタプリタ』と『WRITING A COMPILER IN GO』について まず、『Go言語でつくるインタプリタ』については、 O'REILLY から 2018 年に日本語訳版が発売されたものとなります。 書籍で想定したオリジナルの言語 Monkey のインタプリタを実装していくという内容になっています。 ステップバイステップで少しずつ作っていく流れがわかりやすく、私も楽しくインタプリ
いつも心に省メモリ。どうも、かわしんです。今日はメモリアロケーションについてのポエムを綴ります。さらっと流してください。 ちなみに、ここでいう省メモリとはメモリサイズだけの話ではありません。 メモリをアロケート(確保)するとき、あなたはどんな感情を抱くだろうか?おそらく何も感じない人がほとんどだろう。というかメモリをアロケートしたことにすら気づいていないのかもしれない。 僕はメモリをアロケートするたびに心が痛む。本当はアロケートしなくてもいいのではないか、別のところでまとめてアロケートした方がいいのではないか?色々悩んだ結果、苦渋の選択としてメモリをアロケートするのだ。 メモリアロケーションのコストとは何か 僕がなんとなくメモリアロケーションに罪悪感を覚え始めた時、僕はメモリアロケーションのことを何も知らなかった。大きなメモリを確保するほどコスト(確保に必要な計算時間)が大きくなると思って
クエリビルダーやORMを使うのは基本的に良いこと。 特に開発初期とかはレビューの時間も足りず、クソみたいなクエリを書いてしまったりするので、それを防止するためにも、ライブラリでリスクを担保してあげるのは大事なこと。てか大体は慢心によってそういうの使わないって選択すると失敗すると思う。僕は失敗する自信がある。 自分もGoで開発する時、MySQLに対してのクエリを書く場合は、以下のクエリビルダーを使っている。一部ビルダーでJOINが使えなかったり、サブクエリの書き方が特殊だったりするが、それ以外はだいぶライトな実装で満足している。 ただ、最近サービスもすくすく育ち、レビュー体制が堅実になっていく動きの中で、クエリビルダーを使うのがダルくなってきた。 なんでかというと、多分以下の2つの理由でだるい。 サービス規模に応じて諸事情を孕んだ複雑な実装が生まれるが、その複雑さをクエリが吸収してしまい、メ
【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい by nao · 2022年6月25日 前書き:sqlcとは 本記事は、kyleconroy/sqlcの基本的な情報を紹介します。 sqlcは、DBスキーマ(DBテーブル定義)、SQLクエリ定義、設定ファイルの3点をインプットとして、型安全なCRUDコード + DBテーブルに対応したモデル(構造体)を自動生成します。ここでのモデルの自動生成には、複数テーブルをJOINしたクエリ用の構造体も含まれます。 個人的な視点では、sqlcは「SQLクエリを検証してから、そのクエリを実行するGolangコードを書いて、クエリ結果を受け取るための構造体を書くのが大変」という課題を解決するツールです。独自のDSL(Domain Specific Language)は殆ど登場しないので、SQLをゴリゴリ書ける
はじめに Go言語で開発された有名な製品はDockerやKubernetesを筆頭に数多く存在します。アプリケーション開発としてもWebAPIのバックエンドやCLIツール開発で利用されることも増えていると感じます。IoTの文脈ではTinyGoなど組み込みプログラム領域でも進化を続けていて、WebAssembly(WASM)向けビルドと相まって今後さらなる拡張に期待を持っている人も多いかと思います。 一方で、大規模(1台のサーバに収まらない)データの分散処理分野では、Apache Spark(もちろんHadoop, YARN, etc.)とそのエコシステムが圧倒的に強いと感じます。AWS上であればSparkのマネージドサービスたるAWS Glueがありますし(EMRもありますが)、GCPだとDataprocでSpark(DataflowをApache Beamで扱うことが多そうですが)が広く
はじめに SQLite3 くらい楽に扱えて、PostgreSQL みたいにネットワーク経由で使える物ないかなーなんて思ったりする事ないですか?ありますよね、あるんです。 postlite このニーズに答えてくれるのが postlite です。postlite を使うと SQLite3 で作られたデータベースファイルを、PostgreSQL の様に扱えます。 仕組みは至って簡単で、僕が開発している go-sqlite3 に PostgreSQL の通信プロトコルのガワと、仮想テーブルを使って PostgreSQL のスキーマを疑似しています。 インストール postlite は go-sqlite3 の vtable を使います。ですので、go install ではなく postlite の README.md に書かれた手順を使わなければなりません。
お疲れ様です。小島です。 terraform のリソースは増えていくにつれ、関係性について把握が難しくなるのではないでしょうか。 その時、依存関係を dot 言語で出力してくれる terraform graph があります。 しかし、多くのリソースが含まれる図には多くの関係を示す線が含まれており、把握するには一苦労です。 terraform graph には module-depth という深さを指定し、出力を絞り込むことができるオプションがあります。 ですが、スモールスタートでの開発で徐々にリソースが増えていくような場合だと、 module のリファクタリングは state も考慮する必要があるので後回しになりがちです。 なので、正規表現に該当するリソースだけ吐き出すようなスクリプトを go で書きました。 スクリプト スクリプトの使い方 # Glue に関するリソースを絞り込む ter
Photo by David Thielen on UnsplashIntroductionGoを使ってBigQueryやSpannerのSQLをフォーマットしたりパースしたりしたいなと思い調べたらGoogleが公開しているZetaSQLというライブラリにたどり着きました。 ただZetaSQLはC++とJavaで書かれていたのですが、他にGo製のOSSなどもなく自前でSQLパーサーをちゃんと書くのも大変なのでこれを使ってどうにかできないか模索した話になります。 最終的にはGoからZetaSQLを呼び出すserverを作りました。↓ naoto0822/zetasql-server GitHub - naoto0822/zetasql-server: This is server parsing/analyzing ZetaSQL (ongoing).
本記事はGo3 Advent Calendar 2019 17日目の記事です。 背景 少し前(9月頃?)にGoogleからcueというschemaベースでコンフィグファイルなどに使えるデータ形式が発表されました。相変わらずググラビリティの低い名前ですが、jsonやymlのスーパーセットでありながら、型定義が書けたりvalidationができたりする面白いやつです。 面白いやつなので何か使えないかなーと考えていると、型定義が使えるならgRPCとかと相性が良さそうだなと思いつきました。これはGoogleでも考えられていたのか、cueの実装にはprotobufからcueファイルを生成する実装が含まれています。 ちょうど仕事で毎回 grpcurl への入力をコピペするのにも飽きていたので、この辺りを自動化するテストツールを作り始めました。 ツールの紹介と使い方 まだ出来立てで実戦に投入していません
今回は『CloudEvents仕様のメッセージをローカル端末からCloud Pub/Sub経由でCloud Functionsに渡し、個々の値を取り出しプログラムで扱える形にすること』を目的とします。 以下のような形を目指します。 SDKバージョンについての補足現在v2は work in progress とのことで、今回は雰囲気を掴むためにLatest Releaseの v1.1.2 のソースコードをいじってみます。 ※v1のREADMEには 2020.03.27 を目処にv2リリースを目指すとの記載がありますが、いまも絶賛開発中と思われます。 We will target ~2 months of development to release v2 of this SDK with an end date of March 27, 2020. https://github.com/cl
こんにちは、Necoチームの池添(@zoetro)です。 gofailは、etcdの開発チームがつくったFailure Injectionのためのツールです。 Go言語で書かれたプログラム中に故意にエラーを発生させるポイント(failpoint)を埋め込み、任意のタイミングでプログラムの挙動を変えることができます。 公式ドキュメントに記載されていない項目が多々あるので、詳しい使い方を紹介したいと思います。 なお、本記事は2018年8月時点のソースコードを対象に解説しています。 gofailのインストール gofail をインストールします。 $ go get -u github.com/etcd-io/gofail/... failpointの埋め込み プログラム中にfailpointを埋め込むためには、Go言語のプログラム中に gofail というキーワードから始まるコメントを記述します
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く