Skip to content

Commit 2956c03

Browse files
committed
Add slices.NormalFullsliceCopy
1 parent b6acad7 commit 2956c03

File tree

3 files changed

+76
-21
lines changed

3 files changed

+76
-21
lines changed

examples/basic/slices/README.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@
22

33
このディレクトリには以下のサンプルがあります。
44

5-
| file | example name | note |
6-
| -------------------------------- | ----------------------------- | -------------------------------------------------------------------------- |
7-
| slice_basic01.go | slice_basic01 | スライスについてのサンプル |
8-
| slice_basic02.go | slice_basic02 | スライスについてのサンプル |
9-
| slice_basic03.go | slice_basic03 | スライスについてのサンプル |
10-
| slice_basic04.go | slice_basic04 | スライスについてのサンプル |
11-
| slice_basic05.go | slice_basic05 | スライスについてのサンプル |
12-
| slice_reverse.go | slice_reverse | スライスのリバース処理についてのサンプルです。 |
13-
| slice_append.go | slice_append | スライスの append 利用時についてのサンプルです. |
14-
| slice_pointer.go | slice_pointer | スライスの ポインタ 利用時についてのサンプルです. |
15-
| slice_copy.go | slice_copy | スライスの コピー についてのサンプルです. |
16-
| slice_clear.go | slice_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. |
17-
| slice_deepequale.go | silce_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. |
18-
| slice_concat.go | slice_concat | 2つのスライスの結合に関するサンプルです. |
19-
| slice_remove_all_elements.go | slice_remove_all_elements | スライスの全要素を削除するサンプルです. |
20-
| slice_keep_allocated_memory.go | slice_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. |
21-
| slice_nil_append.go | slice_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル |
22-
| slice_convert_to_array_go117.go | slice_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです |
23-
| slice_append_special_behavior.go | slice_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです |
24-
| slice_iter_values.go | slice_go123_iter_values | Go 1.23で追加された slices.Values() のサンプルです |
25-
| slice_iter_all.go | slice_go123_iter_all | Go 1.23で追加された slices.All() のサンプルです |
5+
| file | example name | note |
6+
| -------------------------------- | ----------------------------- | ---------------------------------------------------------------------------- |
7+
| slice_basic01.go | slice_basic01 | スライスについてのサンプル |
8+
| slice_basic02.go | slice_basic02 | スライスについてのサンプル |
9+
| slice_basic03.go | slice_basic03 | スライスについてのサンプル |
10+
| slice_basic04.go | slice_basic04 | スライスについてのサンプル |
11+
| slice_basic05.go | slice_basic05 | スライスについてのサンプル |
12+
| slice_reverse.go | slice_reverse | スライスのリバース処理についてのサンプルです。 |
13+
| slice_append.go | slice_append | スライスの append 利用時についてのサンプルです. |
14+
| slice_pointer.go | slice_pointer | スライスの ポインタ 利用時についてのサンプルです. |
15+
| slice_copy.go | slice_copy | スライスの コピー についてのサンプルです. |
16+
| slice_clear.go | slice_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. |
17+
| slice_deepequale.go | silce_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. |
18+
| slice_concat.go | slice_concat | 2つのスライスの結合に関するサンプルです. |
19+
| slice_remove_all_elements.go | slice_remove_all_elements | スライスの全要素を削除するサンプルです. |
20+
| slice_keep_allocated_memory.go | slice_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. |
21+
| slice_nil_append.go | slice_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル |
22+
| slice_convert_to_array_go117.go | slice_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです |
23+
| slice_append_special_behavior.go | slice_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです |
24+
| slice_iter_values.go | slice_go123_iter_values | Go 1.23で追加された slices.Values() のサンプルです |
25+
| slice_iter_all.go | slice_go123_iter_all | Go 1.23で追加された slices.All() のサンプルです |
26+
| slice_fullsliceexp_copy.go | slice_normal_fullslice_copy | 通常スライス、フルスライス式、copyビルドイン関数を利用した場合のサンプルです |

examples/basic/slices/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ func (r *register) Regist(m mapping.ExampleMapping) {
3434
m["slice_append_special_behavior"] = AppendSpecialBehavior
3535
m["slice_go123_iter_values"] = IterValues
3636
m["slice_go123_iter_all"] = IterAll
37+
m["slice_normal_fullslice_copy"] = NormalFullsliceCopy
3738
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package slices
2+
3+
import "fmt"
4+
5+
// NormalFullsliceCopy は、通常スライス、フルスライス式、copyビルドイン関数を利用した場合のサンプルです。
6+
func NormalFullsliceCopy() error {
7+
// 通常のスライス操作(メモリ共有あり)
8+
{
9+
s := make([]int, 0, 5)
10+
s = append(s, 1, 2, 3, 4, 5)
11+
12+
s2 := s[:3]
13+
s2 = append(s2, 100)
14+
15+
s3 := s[3:]
16+
s3 = append(s3, 200)
17+
18+
fmt.Println(cap(s), cap(s2), cap(s3)) // 5 5 4
19+
fmt.Println(s, s2, s3) // [1 2 3 100 5] [1 2 3 100] [100 5 200]
20+
}
21+
// フルスライス式(サブスライス作成時に容量制限しメモリ共有を防ぐ)
22+
{
23+
s := make([]int, 0, 5)
24+
s = append(s, 1, 2, 3, 4, 5)
25+
26+
s2 := s[:3:3]
27+
s2 = append(s2, 100)
28+
29+
s3 := s[3:len(s):len(s)]
30+
s3 = append(s3, 200)
31+
32+
fmt.Println(cap(s), cap(s2), cap(s3)) // 5 6 4
33+
fmt.Println(s, s2, s3) // [1 2 3 4 5] [1 2 3 100] [4 5 200]
34+
}
35+
// copyビルドイン関数の利用
36+
{
37+
s := make([]int, 0, 5)
38+
s = append(s, 1, 2, 3, 4, 5)
39+
40+
s2 := make([]int, 3)
41+
copy(s2, s[:3])
42+
s2 = append(s2, 100)
43+
44+
s3 := make([]int, 2)
45+
copy(s3, s[3:])
46+
s3 = append(s3, 200)
47+
48+
fmt.Println(cap(s), cap(s2), cap(s3)) // 5 6 4
49+
fmt.Println(s, s2, s3) // [1 2 3 4 5] [1 2 3 100] [4 5 200]
50+
}
51+
52+
return nil
53+
}

0 commit comments

Comments
 (0)