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
  2. 上田拓也 Go ビギナーズ
 Go Conference
 @tenntenn tenntenn.dev Google Developer Expert

    (Go) 一般社団法人 Gophers Japan 代表理事 Experts Team 2
  3. Goについての活動 ▪ YouTuberやってます • チャンネル登録よろしくお願いします! • https://tenn.in/youtube • tennten.goとかの動画をアップしてます ▪

    登壇資料もアップしてます • https://tenn.in/slides • 今年だけで17枚以上あります • 今回の資料もアップロードします 3
  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
  5. 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
  6. 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
  7. ロック 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メソッドの呼び出しでブロックする