File tree Expand file tree Collapse file tree 3 files changed +70
-10
lines changed
Expand file tree Collapse file tree 3 files changed +70
-10
lines changed Original file line number Diff line number Diff line change 22
33このディレクトリには以下のサンプルがあります。
44
5- | file | example name | note |
6- | ------------------------ | -------------------- | ---------------------------------------------------------------------- |
7- | basic_for_loop.go | loops_basic_for_loop | 他の言語でも同じように存在する基本的な for-loop についてのサンプルです |
8- | basic_foreach.go | loops_basic_foreach | Go での foreach ループのサンプルです |
9- | channel_loop.go | loops_channel_loop | チャネルをループさせる場合のサンプルです |
10- | map_loop.go | loops_map_loop | map のループについてのサンプルです |
11- | range_loop.go | loops_range_loop | 単純に指定回数ループするためのサンプルです |
12- | infinite_loop.go | loops_infinite_loop | 無限ループのサンプルです |
13- | slice_loop.go | loops_slice_loop | スライスのループについてのサンプルです |
14- | for_loop_two_variable.go | loops_two_variable | for ループで 2つの変数 を初期化してループさせるサンプルです |
5+ | file | example name | note |
6+ | ------------------------ | ------------------------- | ---------------------------------------------------------------------- |
7+ | basic_for_loop.go | loops_basic_for_loop | 他の言語でも同じように存在する基本的な for-loop についてのサンプルです |
8+ | basic_foreach.go | loops_basic_foreach | Go での foreach ループのサンプルです |
9+ | channel_loop.go | loops_channel_loop | チャネルをループさせる場合のサンプルです |
10+ | map_loop.go | loops_map_loop | map のループについてのサンプルです |
11+ | range_loop.go | loops_range_loop | 単純に指定回数ループするためのサンプルです |
12+ | infinite_loop.go | loops_infinite_loop | 無限ループのサンプルです |
13+ | slice_loop.go | loops_slice_loop | スライスのループについてのサンプルです |
14+ | for_loop_two_variable.go | loops_two_variable | for ループで 2つの変数 を初期化してループさせるサンプルです |
15+ | go122_loop_variable.go | loops_go122_loop_variable | Go 1.22 で導入された「ループ変数」の仕様変更についてのサンプルです. |
Original file line number Diff line number Diff line change @@ -25,4 +25,5 @@ func (r *register) Regist(m mapping.ExampleMapping) {
2525 m ["loops_for_loop_copy_value" ] = ForLoopCopyValue
2626 m ["loops_diff_range_and_normal" ] = DiffRangeLoopAndNormalLoop
2727 m ["loops_range_loop_tmpvalue_with_array" ] = RangeLoopTmpValueWithArray
28+ m ["loops_go122_loop_variable" ] = Go122LoopVariable
2829}
Original file line number Diff line number Diff line change 1+ package loops
2+
3+ import "github.com/devlights/gomy/output"
4+
5+ // Go122LoopVariable は、Go 1.22 で導入された「ループ変数」の仕様変更についてのサンプルです.
6+ //
7+ // Go 1.22 より、for-range ループ中のループ変数がそれぞれ個別のアドレスを持つ変数となるように調整された。
8+ //
9+ // 以下、Go 1.22 のリリースノートより引用
10+ //
11+ // > Previously, the variables declared by a "for" loop were created once and updated by each iteration.
12+ // In Go 1.22, each iteration of the loop creates new variables, to avoid accidental sharing bugs.
13+ //
14+ // > 以前は、"for "ループで宣言された変数は一度作成され、各反復で更新されていました。
15+ // Go 1.22では、偶発的な共有バグを避けるため、ループの各反復で新しい変数が作成されます。
16+ //
17+ // # REFERENCES
18+ // - https://go.dev/blog/loopvar-preview
19+ // - https://go.dev/blog/go1.22
20+ // - https://go.dev/doc/go1.22#language
21+ func Go122LoopVariable () error {
22+ type st struct {
23+ v int
24+ }
25+
26+ var (
27+ items = []st {
28+ {v : 1 },
29+ {v : 2 },
30+ {v : 3 },
31+ }
32+ )
33+
34+ // Go 1.21 までは、同じアドレスが出力される
35+ // Go 1.22 からは、別々のアドレスが出力される
36+ for v := range items {
37+ output .Stdoutf ("[Value (Addr)]" , "%v (%p)\n " , v , & v )
38+ }
39+
40+ return nil
41+
42+ /*
43+ $ task
44+ task: [build] go build .
45+ task: [run] ./try-golang -onetime
46+
47+ ENTER EXAMPLE NAME: loops_go122_loop_variable
48+
49+ [Name] "loops_go122_loop_variable"
50+ [Value (Addr)] 0 (0xc0001a2908)
51+ [Value (Addr)] 1 (0xc0001a2910)
52+ [Value (Addr)] 2 (0xc0001a2918)
53+
54+
55+ [Elapsed] 37.92µs
56+ */
57+
58+ }
You can’t perform that action at this time.
0 commit comments