Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go 1.18で追加されるstrings/bytes.Cutと(*sync.Mutex).TryLockについて - Go1.18リリースパーティ

Go 1.18で追加されるstrings/bytes.Cutと(*sync.Mutex).TryLockについて - Go1.18リリースパーティ

この資料はGo1.18リリースパーティで登壇を行った際に用いた資料です。

イベントページ:https://gocon.connpass.com/event/234198/
ハッシュタグ:#go118party
資料(Googleスライド):https://tenn.in/cuttrylock

■ 登壇者

・名前:tenntenn / 上田拓也
・HP:https://tenntenn.dev
・Twitter:https://twitter.com/tenntenn
・YouTube:https://tenn.in/youtube

メルカリ/メルペイ所属。バックエンドエンジニアとして日々Goを書いている。Google Developer Expert (Go)。一般社団法人Gophers Japan代表。Go Conference主催者。大学時代にGoに出会い、それ以来のめり込む。人類をGopherにしたいと考え、Goの普及に取り組んでいる。複数社でGoに関する技術アドバイザーをしている。マスコットのGopherの絵を描くのも好き。

■ お仕事の依頼について

副業にて技術顧問やアドバイザーなどを行っています。過去の実績や問い合わせフォームは以下のURLからご確認ください。
https://tenntenn.dev/ja/job/

#golang #tenntenn #go118party #Go言語

tenntenn - Takuya Ueda

February 18, 2022
Tweet

More Decks by tenntenn - Takuya Ueda

Other Decks in Technology

Transcript

  1. The Go gopher was designed by Renée French.
    The gopher stickers was made by Takuya Ueda.
    Licensed under the Creative Commons 3.0 Attributions license.
    Go 1.18で追加される
    strings/bytes.Cutと
    (*sync.Mutex).TryLockについて
    2022年2月18日(金)
    資料:https://tenn.in/cuttrylock
    代打!!
    1

    View full-size slide

  2. 上田拓也
    Go ビギナーズ

    Go Conference

    @tenntenn
    tenntenn.dev
    Google Developer Expert (Go)
    一般社団法人 Gophers Japan 代表理事
    Experts Team
    2

    View full-size slide

  3. Goについての活動
    ■ YouTuberやってます
    ● チャンネル登録よろしくお願いします!
    ● https://tenn.in/youtube
    ● tennten.goとかの動画をアップしてます
    ■ 登壇資料もアップしてます
    ● https://tenn.in/slides
    ● 今年だけで17枚以上あります
    ● 今回の資料もアップロードします
    3

    View full-size slide

  4. 今日話すこと
    ■ strings.Cut関数とbytes.Cut関数
    ● https://pkg.go.dev/[email protected]#Cut
    ● https://pkg.go.dev/[email protected]#Cut
    ● https://go.dev/issues/46336
    ■ (*sync.Mutex).TryLockメソッド
    ● https://pkg.go.dev/[email protected]#Mutex.TryLock
    ● https://go.dev/issues/45435
    ● https://go.dev/issues/6123
    4

    View full-size slide

  5. strings.Cut関数とbytes.Cut関数
    5

    View full-size slide

  6. "key=value"を分けたい
    ■ strings.SplitN関数を使えばできそう
    ● 正しく分割できたか確認する必要がある
    ● 第2引数が空文字の場合、最初の文字で分割される
    strings.SplitN("key=value", "=", 2) // [key value]
    strings.SplitN("key=value", ":", 2) // [keyvalue]
    strings.SplitN("key=value", "", 2) // [k eyvalue]
    6

    View full-size slide

  7. strings.Cut関数
    ■ 文字列を2つに分ける関数
    ● 第1引数の文字列を第2引数の文字列で2つに分割する
    ● 見つからない場合は第3戻り値がfalseになる
    ● 空文字の場合はafterにすべての文字列がくる
    ● []byte型向けのbytes.Cut関数も同様にある
    参考:Go 1.18: Cut added to strings/bytes
    strings.Cut("key=value", "=") // key value true
    strings.Cut("key=value", ":") // key=value false
    strings.Cut("key=value", "") // key=value true
    7

    View full-size slide

  8. strings.Cut関数の実装
    ■ 実装は非常にシンプル
    ● https://cs.opensource.google/go/go/+/refs/tags/go1.18rc1:src/strings/st
    rings.go;l=1181
    func Cut(s, sep string) (before, after string, found bool) {
    if i := Index(s, sep); i >= 0 {
    return s[:i], s[i+len(sep):], true
    }
    return s, "", false
    }
    8

    View full-size slide

  9. (*sync.Mutex).TryLockメソッド
    9

    View full-size slide

  10. ロック
    var m sync.Mutex
    m.Lock()
    go func() {
    time.Sleep(3 * time.Second)
    m.Unlock()
    fmt.Println("unlock 1")
    }()
    m.Lock()
    m.Unlock()
    fmt.Println("unlock 2")
    Playgroundで動かす
    ゼロ値で使える
    ここでブロック
    10
    ■ sync.Mutex
    ● Lockメソッドを呼ぶとUnlockメソッドが呼ばれるまで
    Lockメソッドの呼び出しでブロックする

    View full-size slide

  11. (*sync.Mutex).TryLockメソッド
    ■ ロックされていた場合にブロックしない
    ● ブロックされていたらfalseを返す
    var m sync.Mutex
    fmt.Println(m.TryLock()) // true
    go func() {
    time.Sleep(3 * time.Second)
    m.Unlock()
    fmt.Println("unlock 1")
    }()
    fmt.Println(m.TryLock()) // false
    11

    View full-size slide