タグ

golangに関するrbyのブックマーク (14)

  • Go言語でジェネリクスっぽいことしたいでござるの続き【golang】【generics】 - DRYな備忘録

    前のやつ Go言語でジェネリクスっぽいことがしたいでござる【generics】【golang】 - DRYな備忘録 の続きっていうかメモ /***** * Go言語で型変数を受けるCollectionみたいなの *****/ package main import "fmt" import "reflect" type E struct { element interface{} score int } func (e *E) Elem() interface{} { return e.element } type Collection struct { representative interface{} elements []E } func (c *Collection) Push(v interface{}) (e error) { if reflect.TypeOf(c.repr

    Go言語でジェネリクスっぽいことしたいでござるの続き【golang】【generics】 - DRYな備忘録
    rby
    rby 2018/08/29
  • inforno :: Goのインタフェースがパフォーマンスに及ぼす影響

    Go Advent Calendar 2015 その3 11日目です。その3まであるなんてGo大人気ですね。 Gopherというのはいろいろな人がいてLLからGoへ、という方も多いかと思います。 LLではそもそも全てがオブジェクトだったりで話題になりませんが、よりマシンに近く変態的に速度を重視される方が多いC++では例えば仮想関数や実行時キャストのコストが議論になります。 Goにおいてこういう多態性はインタフェースで表現されます。結論からいうと、 Goのインタフェースにもそれなりのコストがあります。 なので極限までパフォーマンスを要求される場合には 例えばインターフェースを使わない というも選択肢に入ってくるのではないかと思います。 Go言語におけるインタフェースの内部表現 さて、Goはブートストラップ化(言語処理系をその言語自身で実装する)を進めており、1.5ではGoのコンパイラ、ランタ

  • Goへの誤解について

    よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事はGoアドベントカレンダー2017 その3の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね? さっさとgoimportsかgoreturnsを保存時に自動実行するエディタ環境を使いましょう。 gofmtも一緒に実行されていいことずくめですよ! インターフェースがnil判定出来ないパターンがあるのダメじゃん? 最初は私もそう思いました。しかし、typed-nilがnilリテラルと比較できなくなったのは 「nil判定サボったままinterface型に変換した」からでサボらなければ全く問題にならないのです。 map,sliceが不便? map,sliceはメソッドが一切ありません。 極論をいうとGoのプリミティブ型みたいなものなのです。 ユーザーが欲しいものはmapやsliceを駆使して各自

    rby
    rby 2018/08/05
    “プリエンプティブ”
  • nil だと思ってやつが nil じゃなかった - Go

    Go の nil で完全に嵌ったのでメモ。 嵌りポイント 例えば、Revel の validator.go の中にこんな関数がいる。 func (r Required) IsSatisfied(obj interface{}) bool { if obj == nil { return false } if str, ok := obj.(string); ok { return len(str) > 0 } if b, ok := obj.(bool); ok { return b } if i, ok := obj.(int); ok { return i != 0 } if t, ok := obj.(time.Time); ok { return !t.IsZero() } v := reflect.ValueOf(obj) if v.Kind() == reflect.Slice

    nil だと思ってやつが nil じゃなかった - Go
    rby
    rby 2018/08/05
  • golangでcontextパッケージを使う - write ahead log

    使わないから全然覚えられない. とりあえずサンプルを書いて覚えておく. 詳細や思想はdeeeetさんの記事が非常にわかりやすいのでこれ読めばそれでいいと思う. 大雑把な理解 context.Backgroundでcontextを作るか, よそからもらってきたcontextを使って With****メソッドを使ってcontextに意味を持たせる 結果や値はcontextオブジェクトの中に入ってる メソッド With****メソッドは以下がある. メソッド名 用途 WithCancel キャンセル可能にする WithTimeout 一定時間でキャンセルされるようにする WithDeadline 指定時間でキャンセルされるようにする WithValue 値を一緒に引き渡す どれも新しいcontextオブジェクトを返してくれる. メンバ contextのインターフェースは以下のメンバでとてもシンプ

    golangでcontextパッケージを使う - write ahead log
  • Go1.7のcontextパッケージ

    Go1.7ではgolang.org/x/net/contextがcontextパッケージとして標準パッケージに仲間入りする.そしていくつかの標準パッケージではcontextパッケージを使ったメソッド/関数も新たに登場する.contextパッケージは今後さらに重要な,Gopherは普通に扱うべき,パッケージになると考えられる.記事ではそもそもcontextパッケージとは何か?なぜ登場したのか?なぜ重要なのか?どのように使うべきか?についてまとめる. contextパッケージが初めて紹介されたのは2014年のThe Go Blogの記事 “Go Concurrency Patterns: Context”である.この記事ではなぜGoogleがcontextパッケージを開発したのか,どのように使うのか具体的な検索タスクを例に解説されている.まだ読んだことがない人はそちらを先に読むと良い. co

  • Golangでjsonをbsonに変換する - 逆さまにした

    Go言語でMongoDBを扱っているとjsonをbsonに変換したくなります。 APIのレスポンスがjsonで返ってきて、それをMongoDBに格納したいときなどですね。 Go言語でMongoDBを触るためのdriverには、mgoがあります。 変換もmgoからできるのでgo getしておきます。 go get gopkg.in/mgo.v2 あとはUnmarshalJSON()を適用してあげればOKです。 逆にbsonをjsonにしてあげたいときはMarshalJSON()を使います。 それぞれ実装例は以下です。 gist2bd83a17dba79bec793e5f07296e7b6e References mgo - Rish MongoDB driver for Go Go言語でMongoDB使う ①インストール的なところ How to marshal json string to

    Golangでjsonをbsonに変換する - 逆さまにした
  • How to set HTTP status code on http.ResponseWriter

  • Goでファイル系のリソースも一緒にビルドして配布しちゃう! - hatappi.blog

    <<<<<<<<<<<<<<<< 2018/08/23 追記 <<<<<<<<<<<<<<<< go-bindataは今はメンテされていないようです 代わりに私は今rakyll/statikを使うようにしています blog.hatappi.me <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 例えば下記のようなディレクトリ構成のGoプロジェクトがあったとする。 . ├── files │   └── sample.txt └── main.go sampleの中身は sample! sample!! sample!!! main.goの中身は package main import ( "bufio" "fmt" "os" ) func main() { f, err := os.Open("files/sample.txt") if err !=

    Goでファイル系のリソースも一緒にビルドして配布しちゃう! - hatappi.blog
    rby
    rby 2018/07/22
  • Packed Structs in (gcc)go

  • Big Sky :: golang で複数のエラーをハンドリングする方法

    golangいまどき例外ないの頭おかしいって思ってたけどようするにgoroutineと例外がうまくいかないからgoroutineのほう取って例外捨てたってことかねえ。 — Urabe, Shyouhei (@shyouhei) April 15, 2014 FAQ に書いてあります。 Why does Go not have exceptions? - Frequently Asked Questions (FAQ) - The Go Programming Language We believe that coupling exceptions to a control structure, as in the try-catch-finally idiom, results in convoluted code. It also tends to encourage programme

    Big Sky :: golang で複数のエラーをハンドリングする方法
  • GolangのGCを追う

    Go1.5とGo1.6でGoのGCのレイテンシが大きく改善された.この変更について「ちゃんと」理解するため,アルゴリズムレベルでGoのGCについて追ってみた. まずGoのGCの現状をパフォーマンス(レイテンシ)の観点からまとめる.次に具体的なアルゴリズムについて,そして最後に実際の現場でのチューニングはどうすれば良いのかについて解説する. GoのGCの今 最初にGoのGCの最近の流れ(2016年5月まで)をまとめる. Go1.4までは単純なStop The World(STW)GCが実装されていたがGo1.5からは新たなGCアルゴリズムが導入された.導入の際に設定された数値目標は大きなヒープサイズにおいてもレイテンシを10ms以下に抑えることであった.Go1.5で新たなアルゴリムが実装されGo1.6で最適化が行われた. 以下は公開されているベンチマーク.まずはGo1.5を見る. Gophe

    rby
    rby 2018/07/20
  • golangで書いたアプリケーションのstatic link化 - okzkメモ

    goで書いたアプリケーションは実行ファイルひとつコピーするだけでいいのでインスコ超ラクチン」なんて思ってたんですが、 go1.4からnetパッケージを使っているアプリケーションは、フツーにビルドするとdynamic linkになるようになってました。 $ cd /path/to/your_app $ go build $ file your_app your_app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped そんなわけで別環境にバイナリコピーしても動かないケースが発生して超絶アタマを悩ませることになるのですが、 そんなときは以下のようにbuildすればstatic linkになってくれるようです。 $ go build

    golangで書いたアプリケーションのstatic link化 - okzkメモ
    rby
    rby 2018/07/20
  • Go言語(Golang) はまりどころと解決策

    Go の言語仕様はシンプルで他の言語に比べてはまりどころが少なくて学習コストが小さめな言語のように思います。しかし、それでもはまるところがないわけではないので、自分がはまって時間を無駄にしてしまったことを書き留めておきます。 念の為誤解のないように追記しておくと、この文書の目的は Go を批判することではなく GoGo であるがゆえに C++/Java/Python など利用者が Go を使い始めるときに困惑あるいは誤解するであろうポイントをまとめておくことで初めて Go を触る人がスムーズに Go を使い始められるようにすることです。私個人は Go はバランスがとれた良い言語でだと思いますし、気に入っています。 目次 interface と nil (Go の interface は単なる参照ではない) 文献 メソッド内でレシーバ(this, self)が nil でないことをチェ

    rby
    rby 2018/07/20
  • 1