Generator Pattern


1 min read
Generator Pattern

Generator PatternはGo言語における並列処理パターンの一つで、goroutine-safeな値列の生成などに使用することができます。

コードを見た方が早いと思いますので、コードを掲載しましょう。
次の例は複数のgoroutineから共通の連番を採番したいときに利用することができます。

func GenInt(ctx context.Context, max int) <-chan int {
    ch := make(chan int)
    go func() {
        defer close(ch)
        for i := 0; i < max; i++ {
            select {
            case <-ctx.Done():
                return
            case ch <- i:
        }
    }
    return ch
}

返された<-chan intからintの値を取得するようにすることで、重複のない連番を取得することができます。
Go言語において、chanは複数箇所から値の取り出しを行うことができますが、chanに入力された一つの値はどこか一箇所からしか取り出すことができません。そのため、lock等を使用しなくとも、必ず重複無く連番を取得することができます。
lockを使用した場合、若干動作が遅いため、可能であればlockを使用しないで、chanを使用して実装できるとより高速な、Goらしいコードとすることができます。


LINE DEVELOPER DAY 2018に参加した
Previous article

LINE DEVELOPER DAY 2018に参加した

LINE DEVELOPER DAY 2018はLINEの技術に関して紹介するイベントで、2018年11月21日に開催されたので、参加してみました。 八芳園開催地は白金台の八芳園です。初めて来たのですが、厳かな日本庭園なんですね。ちょっと気後れしてしまいます。 DevDayのれん八芳園の入り口にはDEVELOPER DAYのロゴ入り暖簾が下がっていました。 道ばたにたたずむDevDay行灯?灯籠?道案内の方が持つ提灯もDevDay仕様でした会場の建物に向かうには庭園を抜ける必要があり、八芳園を少しですが楽しめるのはなかなか良かったように思います。 受付。茶会のような雰囲気を感じます受付の直後に休憩所的なものが。ここで休憩する人はいるのでしょうか?大きい提灯もありました。雨じゃ無くて良かったですね受付は外にあり、非常に良い雰囲気でした。雨だったとしても建物の中でやれる様なプランはあったのでしょうが、雰囲気が大きく変わっていたと思いますので、雨じゃ無くて良かったですね。

x/crypto/openpgpでデータを暗号化する
Next article

x/crypto/openpgpでデータを暗号化する

OpenPGPはPGP(Pretty Good Privacy)をベースとした暗号化フォーマットです。 Go言語でもgolang.org/x/crypto/openpgpという準標準パッケージで提供されています。 PGPは公開鍵暗号としてメールの暗号化等でよく使用されますが、パスフレーズを用いた対称暗号として使用することもできますので、今回はこちらを紹介します。 TL;DR 暗号化にはSymmetricallyEncrypt()を使用する 復号にはReadMessage()を使用する prompt次第で無限ループする恐れがあるので注意 暗号化 x/crypto/openpgpパッケージでパスフレーズを用いてファイルを暗号化するには、SymmetricallyEncrypt関数を使用します。


GO TOP

🎉 You've successfully subscribed to something tech.!
OK