Skip to content

Add slices.NormalFullsliceCopy #931

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 22 additions & 21 deletions examples/basic/slices/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,25 @@

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

| file | example name | note |
| -------------------------------- | ----------------------------- | -------------------------------------------------------------------------- |
| slice_basic01.go | slice_basic01 | スライスについてのサンプル |
| slice_basic02.go | slice_basic02 | スライスについてのサンプル |
| slice_basic03.go | slice_basic03 | スライスについてのサンプル |
| slice_basic04.go | slice_basic04 | スライスについてのサンプル |
| slice_basic05.go | slice_basic05 | スライスについてのサンプル |
| slice_reverse.go | slice_reverse | スライスのリバース処理についてのサンプルです。 |
| slice_append.go | slice_append | スライスの append 利用時についてのサンプルです. |
| slice_pointer.go | slice_pointer | スライスの ポインタ 利用時についてのサンプルです. |
| slice_copy.go | slice_copy | スライスの コピー についてのサンプルです. |
| slice_clear.go | slice_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. |
| slice_deepequale.go | silce_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. |
| slice_concat.go | slice_concat | 2つのスライスの結合に関するサンプルです. |
| slice_remove_all_elements.go | slice_remove_all_elements | スライスの全要素を削除するサンプルです. |
| slice_keep_allocated_memory.go | slice_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. |
| slice_nil_append.go | slice_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル |
| slice_convert_to_array_go117.go | slice_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです |
| slice_append_special_behavior.go | slice_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです |
| slice_iter_values.go | slice_go123_iter_values | Go 1.23で追加された slices.Values() のサンプルです |
| slice_iter_all.go | slice_go123_iter_all | Go 1.23で追加された slices.All() のサンプルです |
| file | example name | note |
| -------------------------------- | ----------------------------- | ---------------------------------------------------------------------------- |
| slice_basic01.go | slice_basic01 | スライスについてのサンプル |
| slice_basic02.go | slice_basic02 | スライスについてのサンプル |
| slice_basic03.go | slice_basic03 | スライスについてのサンプル |
| slice_basic04.go | slice_basic04 | スライスについてのサンプル |
| slice_basic05.go | slice_basic05 | スライスについてのサンプル |
| slice_reverse.go | slice_reverse | スライスのリバース処理についてのサンプルです。 |
| slice_append.go | slice_append | スライスの append 利用時についてのサンプルです. |
| slice_pointer.go | slice_pointer | スライスの ポインタ 利用時についてのサンプルです. |
| slice_copy.go | slice_copy | スライスの コピー についてのサンプルです. |
| slice_clear.go | slice_clear | スライスのクリア、及び、nilスライスと空のスライスについてのサンプルです. |
| slice_deepequale.go | silce_deep_equal | スライスに対して reflect.DeepEqual() した場合のサンプルです. |
| slice_concat.go | slice_concat | 2つのスライスの結合に関するサンプルです. |
| slice_remove_all_elements.go | slice_remove_all_elements | スライスの全要素を削除するサンプルです. |
| slice_keep_allocated_memory.go | slice_keep_allocated_memory | スライスのメモリ状態をキープしたままで len を 0 にするサンプルです. |
| slice_nil_append.go | slice_nil_append | Nilなスライスに対して append した場合の挙動についてのサンプル |
| slice_convert_to_array_go117.go | slice_convert_to_array_go117 | Go 1.17 以降で有効な スライス から 配列 への変換方法についてのサンプルです |
| slice_append_special_behavior.go | slice_append_special_behavior | append() を利用する際の特別な挙動に付いてのサンプルです |
| slice_iter_values.go | slice_go123_iter_values | Go 1.23で追加された slices.Values() のサンプルです |
| slice_iter_all.go | slice_go123_iter_all | Go 1.23で追加された slices.All() のサンプルです |
| slice_fullsliceexp_copy.go | slice_normal_fullslice_copy | 通常スライス、フルスライス式、copyビルドイン関数を利用した場合のサンプルです |
1 change: 1 addition & 0 deletions examples/basic/slices/examples.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ func (r *register) Regist(m mapping.ExampleMapping) {
m["slice_append_special_behavior"] = AppendSpecialBehavior
m["slice_go123_iter_values"] = IterValues
m["slice_go123_iter_all"] = IterAll
m["slice_normal_fullslice_copy"] = NormalFullsliceCopy
}
53 changes: 53 additions & 0 deletions examples/basic/slices/slice_fullsliceexp_copy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package slices

import "fmt"

// NormalFullsliceCopy は、通常スライス、フルスライス式、copyビルドイン関数を利用した場合のサンプルです。
func NormalFullsliceCopy() error {
// 通常のスライス操作(メモリ共有あり)
{
s := make([]int, 0, 5)
s = append(s, 1, 2, 3, 4, 5)

s2 := s[:3]
s2 = append(s2, 100)

s3 := s[3:]
s3 = append(s3, 200)

fmt.Println(cap(s), cap(s2), cap(s3)) // 5 5 4
fmt.Println(s, s2, s3) // [1 2 3 100 5] [1 2 3 100] [100 5 200]
}
// フルスライス式(サブスライス作成時に容量制限しメモリ共有を防ぐ)
{
s := make([]int, 0, 5)
s = append(s, 1, 2, 3, 4, 5)

s2 := s[:3:3]
s2 = append(s2, 100)

s3 := s[3:len(s):len(s)]
s3 = append(s3, 200)

fmt.Println(cap(s), cap(s2), cap(s3)) // 5 6 4
fmt.Println(s, s2, s3) // [1 2 3 4 5] [1 2 3 100] [4 5 200]
}
// copyビルドイン関数の利用
{
s := make([]int, 0, 5)
s = append(s, 1, 2, 3, 4, 5)

s2 := make([]int, 3)
copy(s2, s[:3])
s2 = append(s2, 100)

s3 := make([]int, 2)
copy(s3, s[3:])
s3 = append(s3, 200)

fmt.Println(cap(s), cap(s2), cap(s3)) // 5 6 4
fmt.Println(s, s2, s3) // [1 2 3 4 5] [1 2 3 100] [4 5 200]
}

return nil
}
Loading