タグ

golangに関するtyruのブックマーク (199)

  • OSS は Windows で動いてこそ楽しい (mattn) - builderscon tokyo 2016

    OSS は Windows で動いてこそ楽しい (mattn) - builderscon tokyo 2016
    tyru
    tyru 2016/12/07
  • 型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば

    思いつきでツールを作ってはリスのように忘れ、再発見しては新鮮な気持ちで便利に使う日々です。 一般にプログラミングにおいては、ソースコードを読むことに意外とばかにならない時間を使うもの。特に Go ではデフォルトで標準ライブラリのソースコードが手元にあり、コードを書く際よい教科書になるので、これを読むことも多いはず。 Go は静的に型付けされる言語なのでその点コードは読みやすいけれど、データ構造が不変ではないので、ある構造体のフィールドがどこで書き換わるのかを知るには、処理を追っていくしかない。名前で grep するのもひとつの手ではあるけど、精度はあまり期待できない。 そこで gofind。簡単に言うと、型やパッケージを含めた名前でもって Go のソースコードを検索するツールです。 go get github.com/motemen/gofind/cmd/gofind 使い方は以下の通り。

    型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば
    tyru
    tyru 2016/10/29
  • Big Sky :: golang でパフォーマンスチューニングする際に気を付けるべきこと

    golang のテストツールには標準でベンチマークツールが付属しています。例えば、引数 n を貰ってその数分だけメッセージの入ったスライスを返す関数 makeSlice が以下の実装だったとします。 foo.go package foo import "fmt" func makeSlice(n int) []string { var r []string for i := 0; i < n; i++ { r = append(r, fmt.Sprintf("%03d だよーん", i)) } return r } 如何にも遅そうなコードですね。まずはこのコードを単品で計測するベンチマークを書きます。 foo_test.go package foo import "testing" func BenchmarkMakeSlice(b *testing.B) { b.ResetTimer()

    Big Sky :: golang でパフォーマンスチューニングする際に気を付けるべきこと
    tyru
    tyru 2016/10/21
  • Big Sky :: golang の sort インタフェース難しい問題が解決した

    golang では配列をソートしたい場合に癖があり、Int や Float64、String といった固定の型であれば sort パッケージが提供する関数でソートが可能でしたが、独自の型や Int64 等といった sort パッケージが用意していない型の配列をソートするには Sorter というインタフェースを備えた型で扱うしかありませんでした。 package main import ( "fmt" "sort" ) type Food struct { Name  string Price int } type Foods []Food func (f Foods) Len() int { return len(f) } func (f Foods) Less(i, j int) bool { return f[i].Price < f[j].Price } func (f Foods

    Big Sky :: golang の sort インタフェース難しい問題が解決した
    tyru
    tyru 2016/10/04
  • go-sql-driver/mysql でプレースホルダ置換をサポートしました : DSAS開発者の部屋

    前回の記事で少し触れましたが、 go-sql-driver/mysql にドライバ側でのプレースホルダ置換を実装するプルリクエストを出していました。 それがマージされたので、背景のおさらいと利用方法を紹介しておきます。 背景 Godatabase/sql の概要については前回の記事で解説しました。 そこで説明したとおり、 DB.Prepare() を使わずに直接 DB.Exec() や DB.Query() を使った場合、 ドライバ側でのプレースホルダ置換に対応していないドライバでは prepare, exec, close で3回のラウンドトリップが発生することになり、パフォーマンスが悪くなります。 基的には DB.Prepare() を使えばいいのですが、前回の記事で修正したスケーラビリティの問題は Go 1.5 になるまで直りませんし、 IN 句があるSQL文などで事前に P

    go-sql-driver/mysql でプレースホルダ置換をサポートしました : DSAS開発者の部屋
    tyru
    tyru 2016/09/18
  • 使い捨てのコードのエラー処理について - podhmo's diary

    tl;dr panic時ではなくerror時にもfullのstack traceが欲しい pkg/errors が便利 はじめに しばらくgoを書いていて、使い捨てのコードのエラー処理についてどうすれば良いのか考えたりしていた。ここで言う使い捨てのコードというのは1ファイル位で作れそうな小さなコマンドラインのコマンドのようなものを指している。 まともなアプリケーションコードでは考えることが色々ある気がするけれど。使い捨てのコードなら以下を満たしていれば十分だと思った。 終了ステータスが0以外になる エラーの発生箇所が正確に分かる(stack trace) 前者はテキトーに書いても自然に満たす気がする。ここでは後者をどうするかについて書く。 panic時は問題なし。ただしerror時には問題がある ここでいうエラー処理は以下の2つを含んでいる。 panic時の処理 error時の処理 テキト

    使い捨てのコードのエラー処理について - podhmo's diary
    tyru
    tyru 2016/08/18
  • Go言語のLogger「zap」は何故高速に構造化されたログを出力する事が出来るのか|株式会社CA Wise

    こんにちは。開発部の平田です。 今回は、PHP製のWeb APIGoに移植するプロジェクトでアプリケーションの情報やエラーを出力する為のLoggerを検討した際に、uber-go/zapというライブラリが公表しているパフォーマンスがその他ライブラリと比べて大分良かったので、どこでパフォーマンスの差を出しているのか、そのアプローチを簡単に紹介したいと思います。 Zap 初めに、簡単にzapの紹介をしておくと今年の2月にUberから公開されたまだ比較的新しいプロダクトです。その為開発ステータスはBetaの段階で出力もJSONしか対応していませんが、Github上で800以上のスターが付いており注目されているプロジェクトとなっています。 「Fast, structured, leveled logging in Go」とあるように、構造化されたログを出力するためのライブラリで、標準のlogのよ

    Go言語のLogger「zap」は何故高速に構造化されたログを出力する事が出来るのか|株式会社CA Wise
    tyru
    tyru 2016/06/19
    「リフレクションやフォーマット文字列のパースを行わない」「アロケートした領域を使い回すことによって、全体的なアロケーションとGCの発生頻度を減らす」
  • Go 1.6 is released - The Go Programming Language

    Andrew Gerrand 17 February 2016 Today we release Go version 1.6, the seventh major stable release of Go. You can grab it right now from the download page. Although the release of Go 1.5 six months ago contained dramatic implementation changes, this release is more incremental. The most significant change is support for HTTP/2 in the net/http package. HTTP/2 is a new protocol, a follow-on to HTTP t

    Go 1.6 is released - The Go Programming Language
    tyru
    tyru 2016/02/20
    "The most significant change is support forHTTP/2 in the net/http package."
  • Big Sky :: golang では for ループの中で defer してはいけない。

    « cat で色々な物をシンタックスハイライト出来る ccat に html 出力機能を入れた。 | Main | 別のプロセスの動的な環境変数を盗み取る » 初めてGolangで書いたデータ投入ツールでプロセスがモリモリ肥大化していくのは ループ内で defer hoge.Delete() とか書いてたせいだったらしい。 defer を消したら100〜200MB落ち着いている。 — m.yuzuki (@ephemeralsnow) December 11, 2015 golang の defer は後処理のキューの登録です。コードを見ていないので分かりませんが、おそらくこういうコードを書いたのだと推測します。 package main import ( "fmt" ) type foo struct { n int } func Create(n int) *foo { fmt.Pri

    Big Sky :: golang では for ループの中で defer してはいけない。
    tyru
    tyru 2015/12/12
    Goのdeferはスコープ単位ではなく関数単位で働くらしい
  • なぜGo言語は設計が悪いのか – Go愛好者の見地から | POSTD

    さて、このタイトル、かなり挑発的ですよね。それは認めます。もう少し説明すると、私は大胆なタイトルが好きなのです。人の注意を引くことができますからね。とにかく、この記事では、Goがひどい設計の言語(実際、当に全て台無しになります)だということを証明していこうと思います。私は既に数カ月間Goで遊んでいますし、たしか6月のいつだったかに初めてHello, Worldを走らせてもみました。私は数学がそんなに得意ではありませんが、あれから既に4カ月経っていますし、 Github 上のパッケージもいくつか手に入れました。言うまでもありませんが、私は仕事Goを使ったことは全くないので、”コードサポート”や”デプロイ”やそのあたりに関する私の意見は話半分で読んでくださいね。 私はGoが大好きです。使ってみて大好きになりました。慣用表現を理解したり、ジェネリクスがないことや、おかしなエラーハンドリングや

    なぜGo言語は設計が悪いのか – Go愛好者の見地から | POSTD
    tyru
    tyru 2015/11/24
    最後のGopher君が巻に火をくべている絵が味わい深い
  • Go の並行処理 - Block Rockin’ Codes

    intro 先日の Go のカンファレンス GoCon で、 Go の並行処理周りについて発表させて頂きました。 Go Conference 2013 spring - connpass 具体的には Goroutine や Channel の話ですが、これらの機能は結構面白くて、いじって遊んでるだけでもわくわくします。 Go の並行処理は、設計方針がわりと特殊だと思うのですが、設計がシンプルなので分かるとそこまで難しくはないです。 (使いこなすのは、経験が必要そうですが) 今回話すにあたって色々調べましたが、発表時間の都合上省いたものもあるし、質疑応答で聞かれて応えられなかったこともあるので、 ここでまとめて置こうと思います。 発表資料 今回の発表資料はこちらです。 このブログの内容は、これをベースにします。 http://jxck.node-ninja.com/slides/gocon-

    Go の並行処理 - Block Rockin’ Codes
    tyru
    tyru 2015/03/03
    ブクマしてなかった
  • Goでアロケーションに気をつけたコードを書く方法 : DSAS開発者の部屋

    GoPythonのようなLLと比べると実行速度は速いのですが、GCは特別速いわけではないので、相対的にGCがパフォーマンスに与える影響は大きくなります。 また、Java に比べると、一時オブジェクトなどのために頻繁にヒープアロケーションを行うとGCの停止時間が長くなりがちですが、一方でヒープアロケーションを避けたプログラミングがしやすい言語でもあります。 MySQL ドライバのような低レイヤーのライブラリを作る場合、アプリケーション側の性能要件を勝手に決めることができないので、現実的な範囲でアロケーションを減らす努力をするべきです。 ということで、前回の記事 で紹介したプレースホルダ置換を実装するにあたって経験した、アロケーションに気を使ったプログラミングについて、チューニングする手順やコード上のテクニックを紹介したいと思います。 1. まずは正しく動くものを作る go-sql-driv

    Goでアロケーションに気をつけたコードを書く方法 : DSAS開発者の部屋
  • 2014-12-22 そろそろStreemについてひとこと言っとくか [長年日記] | Matzにっき(2014-12-22)

    久しぶりの更新 GitHubの <URL:http://github.com/matz/streem> を公開したら驚くべき反響の大きさなので、人もびっくりしている。 ので、ここでちょっとまとめておく。 もともとは日経Linuxの自作言語入門の連載のネタ 時系列的には2015年1月号で言語仕様を決めた(原稿提出は11月中旬) 2015年2月号で実装について解説(原稿提出は12月初旬) 2月号原稿には「github.com/matz/streemを参照のこと」と書いた 提出したその日に1月号発売 原稿提出後、原稿で解説した部分を実装し(300行程度)、githubにアップロード だれかが見つける hackernews, redditなどでバズる github issues, pull requestなどいっぱいくる 私が実装する前に Go で実装しちゃう人が出る (mattn/streee

    tyru
    tyru 2014/12/22
    「現在 C でタスクスケジューリングを実装することの困難さに絶望しつつあるので、 マジで streeem を参考に Go で実装するかも」
  • Golang パフォーマンスチューニング - Qiita

    この記事は Go Advent Calendar 2014 17 日目の記事です。 Go におけるパフォーマンスチューニングの話をします。 これらは Denco や Kocha などでのパフォーマンスチューニングの経験などから得た知見です。 処理系の話ではありませんのでご了承ください。 前提 プロファイリングを取った後、じゃあどうやって最適化するかというところの話です 「推測するな、計測せよ」 アルゴリズムやデータ構造は最適なものが選択されていると仮定します 小手先の最適化を行うよりアルゴリズム自体を変えたほうが圧倒的に良くなります。 この記事の各ベンチマークは Go 1.4 (go version go1.4 linux/amd64)で下記のコマンドにて取っています

    Golang パフォーマンスチューニング - Qiita
    tyru
    tyru 2014/12/17
    Goの正規表現遅いのか
  • docker.sh - a really cool domain parked on Park.io

    The domain name docker.sh is being parked on Park.io. Contact the domain owner to make an offer right now...

  • Release hub 2.2.0-preview1 · mislav/hub

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    Release hub 2.2.0-preview1 · mislav/hub
    tyru
    tyru 2014/10/22
    hubコマンドがGo言語になった。Windowsでもインストールが楽になるなー
  • http://mattn.tonic-water.com/blog/2013/05/10/manage-apps-with-gorem-and-goreman.html

    http://mattn.tonic-water.com/blog/2013/05/10/manage-apps-with-gorem-and-goreman.html
    tyru
    tyru 2014/10/04
    goremはリバプロ。goremanはプロセス監視(foreman)。
  • Goの変数名が短い理由(あるいはGoがほかの言語と違う理由) - Qiita

    Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up

    Goの変数名が短い理由(あるいはGoがほかの言語と違う理由) - Qiita
    tyru
    tyru 2014/09/07
    納得した
  • vim-go-extra を公開致します。

    golang オフィシャル配布物として提供されてきた misc/vim という vim プラグインが、開発対象から外すという理由により先日リポジトリから削除されました。 その変更を受けて vim-jp ではそのコピーを go-vim というリポジトリ名で公開しておりました。日それを vim-go-extra という名称に変更致しました。 以下これまでの流れ。 golang オフィシャルリポジトリから misc/vim が削除される vim-jp が go-vim として misc/vim のコピーを配布 Googlevim-ft-go というリポジトリで misc/vim の一部を公開する vim 体リポジトリに vim-ft-go がマージされる vim-ft-go には misc/vim の一部のみが含まれています。misc/vim からは以下のコマンドが削除されました。 :

    vim-go-extra を公開致します。
  • ghq: リモートリポジトリのローカルクローンをシンプルに管理する - 詩と創作・思索のひろば

    以前紹介したghqというツールで GitHub のリポジトリを手元に簡単クローンしてたのを、環境が新しくなったついでに Go で書き直し、完全リニューアルしました。(前は zsh だったのでなんだかなーと思ってた。) そもそも何をするツールか GitHubGoogle Code Project でホストされている Git、Mercurial のリポジトリを手元にクローンすることができます。リポジトリは設定したルート(デフォルトで ~/.ghq)以下に、以下のようなパスで置かれます。 ~/.ghq/github.com/motemen/ghq go get と似てますね。同じような感じで ghq get <URL> します。 % ghq get https://github.com/motemen/ghq clone https://github.com/motemen/ghq ->

    ghq: リモートリポジトリのローカルクローンをシンプルに管理する - 詩と創作・思索のひろば