概要 Goにはsync.PoolというFreeListの仕組みがあります。 役割としては既に割り当てられたメモリが不要になった時、解放する代わりにListにとして保持しておいて、メモリが必要になったらそこから取るというものです。なのでGCコストやメモリのallocationコストを省くことが可能になります。 またgoroutine-safeであるので並列処理でも問題ありません。 環境 go 1.7.4 どんなところで使われている? 標準パッケージのfmtやloggerライブラリなどでよく見ます。 一定の文字列を保持してから書き込む、という処理を何度も繰り返すので、毎回メモリを確保するよりFreeListを持って再利用することでGCコストやメモリのallocationコストを省いているのが分かります。 使い方 以下のような流れです。 sync.PoolのNewに、FreeListを新規作成す
こんにちは。 Golangが一般的に使われるようになってきてもう久しいですね。 最近作られたSWET製のツールでも、Golangを採用したものがあります。 そこで、Golangの標準テストパッケージtestingやその他についてまとめたいと思います。 今回から3回にわたり、 testingパッケージを使ったユニットテスト(testing) テストにおける共通処理(testing) アプリケーションのテスト(gomock, httptest) を紹介します。 この記事を読んで一通りGolangでテストがかけるようになると嬉しいです。 この文章中に登場するサンプルは GitHub にありますので、実際に動作させることが可能です。 $ go get github.com/duck8823/sample-go-testing $ cd $GOPATH/src/github.com/duck8823
Proverbs from @rob_pike's inspiring talk at Gopherfest SV 2015 (video). The Gopher character is based on the Go mascot designed by Renée French and copyrighted under the Creative Commons Attribution 3.0 license. These proverbs are the basis of a talk by Rob Pike and the list may be updated when he next gives the talk. Please read the contribution guidelines before opening an issue to nominate a ne
バイナリエディタを作りました。 インストールはHomebrew brew install itchyny/tap/bed または以下のコマンドでできます。 go get github.com/itchyny/bed/cmd/bed なぜ作ったのか 私は昔からファイルフォーマットに興味があり、画像ファイルやPDFファイルのフォーマットを調べるのが好きでした。 最近も圧縮ファイルのフォーマットを趣味で調べたりしています。 コンパイラ技術にも興味があり、ゆくゆくは実行ファイルを生成したりしたいなという思いもあります。 バイナリファイルをエディットするにはバイナリエディタが必要となるわけですが、自分の手に馴染むUIを持つエディタがありませんでした。 私は実はVimというエディタが好きなので、Vimのようなインターフェースを持ち、ターミナルの中で動くエディタを探したのですが、なかなかありません。 b
最近は、GoバイナリのGitHubリリースにgobump、ghch、goxz、ghrを利用している。これらのツールを組み合わせることで、repairableな形でリリース作業を自動化できる。 GoバイナリのGitHubリリースに一般的に必要な一連のプロセスを分解すると、下記のようになる。 バージョニング CHANGELOGの生成 クロスコンパイル: Linux、OSX、Windows用バイナリの作成など パッケージング: tar.gzの作成など GitHub Releaseへのアーカイブアップロード 各ステップを担当するミニマムなツールを組み合わせ、一連のプロセスを実行できる。*1 gobump: https://github.com/motemen/gobump バージョニング ghch: https://github.com/Songmu/ghch CHANGELOGの生成 goxz:
This tool instantly converts JSON into a Go type definition. Paste a JSON structure on the left and the equivalent Go type will be generated to the right, which you can paste into your program. The script has to make some assumptions, so double-check the output! For an example, try converting JSON from the SmartyStreets API or the GitHub API. © 2015 Matt Holt (@mholt6) • View on GitHub • Dark mode
はじめに LLVMは、コンパイラを作成するための基盤です。2000年にChris Lattnerによって作成され、2003年にリリースされました。それ以来、LLVMリンカ lld やLLVMデバッガ lldb など幅広いツール群を持つ包括的なプロジェクトに発展してきました。 LLVMの秀でた特徴は、一般に LLVM IR と呼ばれる、その中間表現です。LLVMの考え方は、まずこのIRにコンパイルし、次にそのIRを、JITコンパイルする、インタープリタで実行する、または実行しているマシンのネイティブアセンブリにコンパイルするといういうものです。このIRの主なターゲットは、コンパイラです。実際LLVMを使用するコンパイラは、世の中に数多くあります。C言語とC++用はそれぞれclangとclang++、D言語用の ldc2 、Rust、Swiftなどです。 Emscripten のようなプロジェ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く