実装して理解するスライス #golang
はじめに この記事はGoアドベントカレンダーの1日目の記事です。 スライスの実態 runtimeのコードをみるとGoのスライスは以下のように定義されています。 type slice struct { array unsafe.Pointer len int cap int } reflectパッケージのSliceHeaderを見ても次のような定義になっています。 type SliceHeader...
View ArticleGo言語の strings.Builder による文字列の連結の最適化とベンチマーク
この記事は、Go Advent Calendar 2018の4日目の記事です。実は5日目も投稿したのですが、カレンダーが空いてた&貯めてた記事あったのでここで投稿します! 3日目はkechakoさんの UDP サーバーでクライアント毎に net.Conn を作る #golang でした! 文字列結合が大量に発生すると、Go言語であろうとさすがにコストが高くなる。 そこで Go1.10...
View ArticleGo言語の golang/go パッケージで初めての構文解析
この記事は、Go Advent Calendar 2018の5日目の記事です。 「Go言語でつくるインタプリタ」を読んで、プログラミング言語の「仕組み」に興味がでてきた。そして、Go言語だと構文解析が簡単に出来るとの噂が!ということで golang/go...
View Articlego runの実行をwrapしてhttp/httpsのrequestを手軽にtraceしたい
はじめに この記事はGoアドベントカレンダー の5日目の記事です。 自己紹介 ちょっとだけ自己紹介を。好きな標準ライブラリはgo/astやgo/typesです。愛憎半ば的なライブラリはx/tools/go/loaderです。今年はgomvpkgのlight版を作ったりしてました。 ちょっとした導入 溜まっていく書き捨てのコードたち...
View Article【小ネタ】すげー古いLinuxサーバーでGo言語を使うときに注意すること
この記事は Go Advent Calendar 2018 7日目の穴埋め記事です。 シングルバイナリ最高ですよね! Go4 Advent Calendar 2018 の2日目の記事 で、こんなことを書きました: いちいち情シスにおうかがいたてなくても、ホームフォルダにコピるだけ使える!シングルバイナリが作れるGo言語最高ですね! ちなみに、昔書いた別の投稿 でも同じこと書いてました。...
View ArticleGo + docker で Mysqlを使う(multi-stage builds & docker-composeで)
やりたいこと 普通にイメージを作成するとどうしても大きくなってしまうGoイメージですが、multi-stage buildsにすると 格段にサイズが小さくすることができます。 今回はdocker(docker-compose)で環境を準備し Go から MySQL にアクセスする方法について書いていきます。...
View ArticleGo+SAMでLambda Layersのテンプレートを作成
GoでLambda Layers re:Invent2018で発表されたLambda Layersですが、どのサイトを見てもPythonの記事ばかりなので、実際にGoを使ってLambda Layersに挑戦してみます。 環境準備...
View ArticleWindows 上の go-gl で Cgo を不要にしようとしている話 - なぜ Syscall18 が生まれたか
tl;dr go-gl は Go の OpenGL バインディングです。 Windows などのデスクトップ環境に対応しています。実装は単純に C の関数を Cgo を使って呼ぶだけです。が、 Cgo には後述するような問題があり、現在のところ必要悪とみなされています。 ところで Windows では、 DLL からの関数ポインタ取得および syscall.Syscall...
View ArticleGoで作るP2Pライブラリ
TL;DR Goはネットワークライブラリを書くのに非常に良かった libp2pやIPFSに期待 はじめに はじめにお断りしておくとあまり実用的な話題ではありません・・・。 以前GoでP2Pファイル転送コマンドを作ったという記事を書いたときにも結構触れたのですがP2Pの仕組みを個人的に勉強したい、またライブラリを作ってGoで使いたい、という思いになり、P2Pネットワークライブラリを実装してみました。...
View Article正しさとGo
はじめに Goの良いところは、最低限の文法を知っていればコードを上から順番に読むことで詳細を容易に理解できることです。 文法の中にシンタックスシュガーや特別な省略が許されていないため多様な表現になることはありません。 そのためGoを書ければGoの本体と標準ライブラリを読むことができます。 しかし以下の原因により、これらの利点を守ることが難しくなることがあります。 DSL フレームワーク 抽象化...
View ArticleGo言語は沼
Go言語入門者である私が気づいたことを長々と書いています。 既に他の方が言及されていることも多いです。また初心者でよくわかっていないことも多いためお手柔らかにお願いします。 なお、順番は適当です。 Go Advent Calendar 2018 24日目の記事として投稿させていただいております。 (元々の方が投稿されていなかったようなので、代わりに入れさせて頂きました。)...
View Article