タグ

ブックマーク / kaneshin.hateblo.jp (5)

  • golangでABテストの振る舞いを実装する - at kaneshin

    golangに限らないんですが、ABテストの振る舞いをちゃんとした設計のもと実装するのって難しいと思っています。 よくあるパターンとしては、Userという構造体があって、それに対してABテストによる振る舞いを変えるように実装をすることかと思います。 User type User struct { ID int Name string } 関数を生やす あまり考えずに関数を作っていく方針 func (u User) IsFoo() bool { return u.ID%10 == 0 } func (u User) IsBar() bool { return u.ID%10 == 1 } func main() { u := User{ID: 1, Name: "kaneshin"} fmt.Println(u.IsFoo()) fmt.Println(u.IsBar()) } コード:ht

    golangでABテストの振る舞いを実装する - at kaneshin
    peketamin
    peketamin 2017/02/22
  • golang で始める Slack bot 開発 - at kaneshin

    この記事は Slack Advent Calendar 2016 - Qiita の3日目の記事です。 昨日は Kinoppyd さんの「今そこにあるSlack」でした。 さて、今回、この記事では golangSlack bot を実装する方法を紹介しようと思います。 世に蔓延る Slack bot これから bot を世に放とうとしている人は、是非、1日目と2日目の記事を読み、事前知識を頭に叩き込んでおくと良いと思います。 Slackで業務チャンネルの平穏を維持するbot、そして人間のトークンをbotに与える話 - Qiita 今そこにあるSlack的に、自身で作成した bot はもちろん好きになると思いますが、人によっては理解不能な bot や、意味不明な場面で反応したりと、「邪魔だな」と思われてしまうことがあります。そのため、bot を開発する人は「謙虚・尊敬・信頼」(T

    golang で始める Slack bot 開発 - at kaneshin
    peketamin
    peketamin 2016/12/04
  • golang の httptest パッケージを使う - at kaneshin

    この記事は Go Advent Calendar 2016 - Qiita の2日目の記事です。 Golang については書きたいことがたくさんあるので、Go Advent Calendar 2016 その4が出てきても良いのではと思っている次第です。(空いていればいつでも書きます) さて、今回、この記事では Golang で書かれた Web アプリケーションのリクエストのユニットテストについて解説しようと思います。 github.com 1. Testing HTTP Handler 検証のために、ただ単に "pong" を返却する pingHandler と、URLクエリから値を取得してそのまま返却する echoHandler の2つを定義します。 ー pingHandler // pingHandler returns just "pong" string. func pingHan

    golang の httptest パッケージを使う - at kaneshin
    peketamin
    peketamin 2016/12/03
  • golang で regexp パッケージを使うときに気をつけること - at kaneshin

    golang の Regexp は初期化の Compile コストがそこそこありますが、実は正規表現のパターンと対象となる文字列によって、初期化コストが無視できる(パターンと文字列に支配される)くらい遅くなります。よく言われる regexp の初期化コスト問題が無視できると言われても、正直、全く嬉しくないですね。 ただ、コーディング中に regexp パッケージを使わなければいけない場面は出てくるため、なるべくコストの掛からない実装を心がけています。 Compile/MustCompile 初期化コストはなくすため、グローバルに保持するようにします。 定義 var re = regexp.MustCompile("[a-z]{3}") func main() { fmt.Println(re.FindAllString("foobarbazqux", -1)) // => [foo bar

    golang で regexp パッケージを使うときに気をつけること - at kaneshin
    peketamin
    peketamin 2016/10/15
  • golang の channel を使って Dispatcher-Worker を作り goroutine 爆発させないようにする - at kaneshin

    golang で処理の高速化をするために goroutine/channel を使って並行処理にし、待ち時間を無駄にしないようにするのは言葉で表すのは簡単ですが、実際にパターンとして落としこむためには経験が必要だなと思うので、今回 Dispatcher-Worker として Job Queue を golang で実装する方法を紹介したいと思います。 この記事は mattn さんの Big Sky :: golang の channel を使ったテクニックあれこれ の次のステップとして読むことをオススメします。 mattn.kaoriya.net golang で作成したアプリケーションで多くのリクエストをアプリケーションが送受信する必要がある場合、高速に捌くために並行処理にして非同期化を図る場合を想定しています。 今回は get という関数でHTTPリクエストを実行して取得したデータのサ

    golang の channel を使って Dispatcher-Worker を作り goroutine 爆発させないようにする - at kaneshin
    peketamin
    peketamin 2016/08/19
  • 1