タグ

golangとGolangに関するlearnのブックマーク (105)

  • なぜGo言語は設計が悪いのか – Go愛好者の見地から | POSTD

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

    なぜGo言語は設計が悪いのか – Go愛好者の見地から | POSTD
  • Go言語でGraceful Restartをするときに取りこぼしを少なくする

    少し前にStarletにGraceful Restartが時たま上手く動かない問題を修正するpullreqを投げました。 原因は割り込みハンドラ内でexitを呼んでいたからでした。 「割り込みハンドラ内ではフラグを建てるだけ」 「メインのプログラム内でそのフラグを見て分岐する」という原則があるのですが、それを守るのは難しいということですね。 (しかし新たな問題を産んでしまいrevertされてしまいましたが・・・ まあ修正後のコードも考え方は一緒です。割り込みホント難しい・・・) このpullreqを取り込んでもらうときに再現実験をやってみたのですが、 Goでもちゃんと動くのかな?と気になったので Go言語でGraceful Restartをするで紹介した プログラムに同じテストをやってみました。 2017-01-22追記: Go1.8以降でGraceful Shutdownがbuild-i

    learn
    learn 2015/11/24
  • Go言語で、クラス名からインスタンスを動的コンストラクトする、みたいなの【golang】【reflect】 - DRYな備忘録

    問題 なんか文字列渡ってきてそれに対応するクラスをインスタンス化するみたいなのやったりする。 たとえば PHP <?php class MyKlass { public $prop = "foo"; public function meth() { echo "This is my method\n"; echo "This.prop = {$this->prop}"; } } $class_name = "MyKlass"; $k = new $class_name(); $k->meth(); Python class MyKlass: def __init__(self): self.prop = "buz" def meth(self): print("This prop is " + self.prop) mod = { "MyKlass":MyKlass } class_nam

    Go言語で、クラス名からインスタンスを動的コンストラクトする、みたいなの【golang】【reflect】 - DRYな備忘録
    learn
    learn 2015/10/29
  • Goとテスト

    https://github.com/tddbc/TestingFrameworkMeeting で話した資料です。

    Goとテスト
  • イベントループなしでのハイパフォーマンス – C10K問題へのGoの回答 | POSTD

    この投稿は、私が去年OSCONで行ったプレゼンテーションを基に作成しています。プレゼンよりは簡潔に編集し直し、プレゼン後にいただいたいくつかのフィードバックに応える形で記事を書いています。 Go言語に関してよく言われるのは、Go言語はサーバでうまく機能し、静的なバイナリや強力な並行処理、高いパフォーマンスを見せくれるということです。 この投稿では、その後半の2つの項目に関して焦点を当てます。プログラマとってGo言語とそのランタイムは、スケーラブルなネットワークサーバをスレッド管理やブロッキングI/Oを気にせずに書くのにどんなに有効かを説明していきます。 効率的なプログラミング言語に関しての議論 技術的な話に入る前に、Go言語をターゲットにしたマーケットを説明する2つの議論に関してお話したいと思います。 ムーアの法則 画像は以下より引用; 2005年5月にHerb Sutter氏が書いたDr

    イベントループなしでのハイパフォーマンス – C10K問題へのGoの回答 | POSTD
  • Big Sky :: golang でスライスの先頭に追加する append がなぜ遅いのか

    Go - ISUCON5予選でスコア34000を出す方法 - Qiita Goで下記のようなsliceの先頭にひたすらオブジェクトを追加する処理を書く際は、不必要に長いsliceにならないよう注意しましょう。負荷が非常に高い処理になります。 hoge := []int{} for _, comment := range comments { hoge = append([]int{comment.ID}, hoge...) } http://qiita.com/y_matsuwitter/items/771020ebb68c07053548 append は第一引数のスライスに第二引数以降の可変個アイテムを追加する関数です。なるべく呼ばれない実装が良いです。どうしても多いアイテムを扱う場合は出来れば以下の様に書くのが良いです。 参考: https://blog.golang.org/sli

    Big Sky :: golang でスライスの先頭に追加する append がなぜ遅いのか
  • Goで毎分100万リクエストを処理する | POSTD

    Malwarebytes は、驚くべき成長を見せています。1年以上前にこのシリコンバレーの会社に入社して以来、私の主な仕事は急成長するセキュリティ企業の力となるシステムの設計と開発です。日々数百万人が利用する製品をサポートするために必要な、全ての基盤をつくります。私は12年以上、アンチウイルスとアンチマルウェアに関わるいくつかの会社で働いてきました。毎日処理する膨大なデータのせいで、これらのシステムがどれだけ複雑なものになるかを理解しています。 面白いことに、ここ9年ほどで私が携わったWebのバックエンド開発のほとんどは、Ruby on Railsが使われていました。誤解されないように言っておきますが、私はRuby on Railsが大好きですし、すばらしい環境だと思っています。しかし、Rubyでシステムを設計し始めると忘れてしまうのは、マルチスレッド化や並列化、高速化、メモリオーバーヘッ

    Goで毎分100万リクエストを処理する | POSTD
  • Goで使える10のテクニック | POSTD

    ここでは、私がたどりついた最善のやり方を紹介しましょう。個人的に過去数年にわたって大量のGoコードと付き合ってきた経験から集めたものです。これらは全て非常にスケーラビリティがあると思っています。私が、スケールする、と言うときは次のような意味があります。 アプリケーションが求める環境は、アジャイル環境の中で変化していきます。開発の3、4か月後に、全てをリファクタリングする必要が出てくるなど、考えたくもないはずです。新しい機能は簡単に追加できなくては意味がありません。 あなたのアプリケーションは多くの人々によって開発されます。可読性が高く、維持しやすいものでなくてはなりません。 あなたのアプリケーションは大勢の人々に使われます。バグは容易に特定でき、修正できなくてはなりません。 長期的にみるとこれらのことが重要になる、ということを私は今までに学んできました。小さなことであっても、多数に影響しま

    Goで使える10のテクニック | POSTD
  • Go言語のcontextパッケージについてのやりとり - ワザノバ | wazanova

    https://news.ycombinator.com/item?id=8103128 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約2時間前 The Go Blogにおける、 Goサーバにおいては、goroutineが受取ったリクエストに対応する。request handlerは、DBやRPCサービスなどバックエンドにアクセスするために、複数のgoroutineを起動させることがよくある。それらのgoroutineは、ユーザのアイデンティティ / 認証トークン / リクエストの期限など、そのリクエストのスコープ内の変数にアクセスする必要がある。また、リクエストがキャンセルになったり、タイムアウトすれば、一連のgoroutineは直ちにexitして、システム側がリソースを確保できるようにする必要がある。 G

    learn
    learn 2015/06/29
  • Go言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5

    Go言語のDependency/Vendoringは長く批判の的になってきた(cf. “0x74696d | go get considered harmful”, HN).Go1.5からは実験的にVendoringの機能が入り,サードパーティからはDave Chaney氏を中心としてgbというプロジェクベースのビルドツールが登場している.なぜこれらのリリースやツールが登場したのか?それらはどのように問題を解決しようとしているのか?をつらつらと書いてみる. Dependencyの問題 最初にGo言語におけるDependecy(依存解決)の問題についてまとめる.Go言語のDependencyで問題なのはビルドの再現性が保証できないこと.この原因はimport文にある. Go言語で外部パッケージを利用したいときはimport文を使ってソースコード内にそれを記述する.このimport文は2通りの

  • Goでwebサーバー作るときに考えたこと - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Goでwebサーバーを作るときに考えたことをまとめておきます。 dockerコンテナで動かす場合を少し考慮してます。 フルスタックフレームワークか軽量系フレームワークか 最初に突きつけられる問題です。 フルスタックフレームワーク revel beego 軽量系フレームワーク goji negroni どんなフレームワークもそうですが、フルスタックなフレームワークならば、 その道に乗っかることで余計なことを考えずにすみます。 だけどその道から外れることをする場合に苦労が伴います。 golangの場合、Go初心者ならばフルスタックでもいいけ

    Goでwebサーバー作るときに考えたこと - Qiita
  • 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs

    Go is a simple and fun language, but, like any other language, it has a few gotchas... Many of those gotchas are not entirely Go's fault. Some of these mistakes are natural traps if you are coming from another language. Others are due to faulty assumptions and missing details. A lot of these gotchas may seem obvious if you took the time to learn the language reading the official spec, wiki, mailin

    50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs
  • エラーを検査する - Qiita

    NOTE: この記事は Inspecting Errors を翻訳したものです。 原文に従い、 Creative Commons ライセンスで公開します。 error インターフェイス型の値を返す関数の一般的な契約は、呼び出し側はその error をチェックする前にそれ以外のいかなる戻り値も利用してはいけないというものです。 多くのケースにおいて、関数が返した error 値は呼び出し元にとって不透明であるべきです。 error が nil かどうかチェックすることで呼び出しが成功したかどうかを知ることができ、そしてそれ以上のことはしません。 少ないケースにおいて、主にネットワークなどプロセス外の世界とやりとりする場合に、呼び出し側がエラーの種別を調べて、操作をリトライするべきかどうかを決める必要があります。 パッケージ作者に対して、呼び出し側がエラーの型を判別して利用できるように返すエラ

    エラーを検査する - Qiita
  • Go言語でプラグイン機構をつくる

    dullgiulio/pingo Go言語でのプラグイン機構の提供方法は実装者の好みによると思う(cf. fluentd の go 実装におけるプラグイン構想).Go言語はクロスコンパイルも含めビルドは楽なのでプラグインを含めて再ビルドでも良いと思う.が,使う人がみなGo言語の環境を準備しているとも限らないし,使い始めてもらう障壁はなるべく下げたい.プラグインのバイナリだけを持ってこればすぐに使えるという機構は魅力的だと思う. Go言語によるプラグイン機構はHashicorpの一連のプロダクトやCloudFoundryのCLIなどが既に提供していてかっこいい.net/rpcを使っているのは見ていてこれを自分で1から実装するのは面倒だなと思っていた. dullgiulio/pingoを使うと実装の面倒な部分を受け持ってくれて気軽にプラグイン機構を作れる. 使い方 サンプルに従ってプラグインを

  • Introducing A Cross-Platform Debugger For Go - Transactional Email API Service For Developers | Mailgun

    Send Email API & SMTP services to send, receive, and track emails

    Introducing A Cross-Platform Debugger For Go - Transactional Email API Service For Developers | Mailgun
  • Go言語のツールが最新バージョンであるかをユーザに伝えるためのgo-latestというパッケージをつくった

    Go言語のツールが最新バージョンであるかをユーザに伝えるためのgo-latestというパッケージをつくった tcnksm/go-latest Webアプリケーションとは異なり,コマンドラインツールやモバイルアプリはバージョンアップがユーザに委ねられる.そのため一度リリースしてしまうとバージョンアップをしてもらうのが難しくなる(バグを含めてしまった場合にロールバックもできない cf. “Mobile First Development at COOKPAD #deploygate”).とにかくしっかりテストをしてそもそもバクを含めないというのも大切だが,完璧なソフトウェアは存在しないので,アップデートは常に必要になる. モバイルアプリとは異なり,Go言語でツールを書いきバイナリとして配布した場合は,最新のバージョンがすでに存在していることをユーザに伝える仕組みはそもそもない.ので,最新のバー

  • google/gxui: An experimental Go cross platform UI library.

    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

    google/gxui: An experimental Go cross platform UI library.
  • Go コードのレビュー時によくされるコメント - GRACEFULEXIT

    CodeReviewComments から Go コードのレビュー時によくされるコメントについて。 gofmt gofmt またはそのスーパーセットである goimports を実行すること。goimports は gofmt に加えて import 行の修正も行う。 コメント文 http://golang.org/doc/effective_go.html#commentary を参照。宣言に対するコメントは少し冗長に見えるかもしれないけど完全な文にする。そうすれば godoc できれいに整形される。次のように説明するものの名前から始めピリオドで終える。 // A Request represents a request to run a command. type Request struct { ... // Encode writes the JSON encoding of re

  • Golang Cafe #19 まとめ 「Twelve Go Best Practices」を読む(ソースコード説明編) - taknb2nchのブログ

    2014/03/02に開催された「Golang Cafe #19」についてのまとめです。 今回から何回かに分けてTwelve Go Best Practicesを読んでいきます。 ソースコードはこちらにあります。historyを追っていただければ下記で説明する手順を確認できます。 1. Avoid nesting by handling errors first(最初にエラー処理を行うことでネストを避ける) 説明をするために簡単なコードです。 type Gopher struct { Name string AgeYears int } func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) { err = binary.Write(w, binary.LittleEndian, int32(len(g.Name))) i

    Golang Cafe #19 まとめ 「Twelve Go Best Practices」を読む(ソースコード説明編) - taknb2nchのブログ
  • Introduction · Build web application with Golang

    Go Web プログラミング Webプログラミングが好きでGo webプログラミングを書きました。皆さんに気にいってもらえれば幸いです。