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

new(1.26) ← これすき / kamakura.go #8

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

new(1.26) ← これすき / kamakura.go #8

Avatar for utagawa kiki

utagawa kiki

February 27, 2026
Tweet

More Decks by utagawa kiki

Other Decks in Programming

Transcript

  1. 今すぐ func[T](T) *T を捨てる • go.modにgo 1.26って書く • go fix

    -newexpr を実行する ◦ 既存の呼び出しも置き換えてくれる ◦ //go:fix inlineコメントも付け足す 17
  2. go fix -inlineの注意点 • ジェネリクスの型引数を渡した関数呼び出し しかインライン化されない ◦ Ptr[int](1) はインライン化される ◦

    Ptr(1) はインライン化されない ◦ go fix -newexpr ではインライン化される • 現状そういう制約らしい 19
  3. 24個のAnalyzer • appendclipped • bloop • any • errorsastype •

    fmtappendf • forvar • mapsloop • minmax • newexpr • omitzero • plusbuild • rangeint 24 • reflecttypefor • slicescontains • slicesdelete • slicessort • stditerators • stringscut • stringscutprefix • stringsseq • stringsbuilder • testingcontext • unsafefuncs • waitgroup
  4. bloop • ベンチマークで b.N ではなく b.Loop() の値 を使うforループに書き換える • Go

    1.24 • デフォルトでは無効 ◦ ベンチマーク結果が変わりうる 28
  5. bloop (before) for i := 0; i < b.N; i++

    { // benchmark code } 29
  6. forvar (before) var wg sync.WaitGroup for i := range 10

    { i := i wg.Go(func() { fmt.Println(i) }) } wg.Wait() 39
  7. forvar (after) var wg sync.WaitGroup for i := range 10

    { wg.Go(func() { fmt.Println(i) }) } wg.Wait() 40
  8. minmax (before) var x int if a < b {

    x = a } else { x = b } 45
  9. rangeint • for i := 0; i < n; i++

    { ... } というforループ を for i := range n { ... } に置き換える • Go 1.22 50
  10. slicescontains (before) for _, x := range xs { if

    x == 0 { return true } } return false 55
  11. stringsbuilder (before) var s = "[" for x := range

    seq { s += x s += "." } s += "]" use(s) 74
  12. stringsbuilder (after) var s strings.Builder s.WriteString("[") for x := range

    seq { s.WriteString(x) s.WriteString(".") } s.WriteString("]") use(s.String()) 75
  13. おつかれさまでした • appendclipped • bloop • any • errorsastype •

    fmtappendf • forvar • mapsloop • minmax • newexpr • omitzero • plusbuild • rangeint 85 • reflecttypefor • slicescontains • slicesdelete • slicessort • stditerators • stringscut • stringscutprefix • stringsseq • stringsbuilder • testingcontext • unsafefuncs • waitgroup
  14. 参考 • godoc ◦ fmt ◦ encoding/json ◦ errors ◦

    golang.org/x/tools/go/analysis/passes/modernize ◦ maps ◦ reflect ◦ slices ◦ strings ◦ sync ◦ testing ◦ unsafe 86
  15. 参考 • Go 1.26 Release Notes - The Go Programming

    Language • Using go fix to modernize Go code - The Go Programming Language • Go 1.26で go fix が面白くなった | フューチャー技術ブログ • go fix -inlineで型引数を省略した関数呼び出しがインライン 化できないことを示すコード 87