diff --git a/args.go b/args.go index af4b3e9..d20689f 100644 --- a/args.go +++ b/args.go @@ -6,7 +6,6 @@ "strings" ) - func main() { fmt.Printf("args: %+v\n", os.Args) fmt.Printf("args: %+v\n", os.Args[1:]) diff --git a/array.go b/array.go new file mode 100644 index 0000000..b6a9115 --- /dev/null +++ b/array.go @@ -0,0 +1,31 @@ +package main + +import "fmt" + +func main() { + var a[3]int // 要素の値を省略したらゼロ値 + fmt.Printf("a: %+v\n", a) // [0, 0, 0] + b := [3]int{1, 2, 3} + fmt.Printf("b: %+v\n", b) // [1, 2, 3] + c := [3]int{1, 2} + fmt.Printf("c: %+v\n", c) // [1, 2, 0] + d := [3]int{2: 2} + fmt.Printf("d: %+v\n", d) // [0, 0, 2] + e := [3]int{0:1, 1: 2} + fmt.Printf("e: %+v\n", e) // [1, 2, 0] + + // 要素が比較可能であればその配列型も比較可能 + fmt.Printf("a==b: %v\n", a == b) // false + fmt.Printf("c==e: %v\n", c == e) // true + // f := [4]int{} + // fmt.Printf("a==f: %v\n", a == f) // compile error: [3]int == [4]int + + hoge(a) + fmt.Printf("a: %+v\n", a) // [0, 0, 0] +} + +func hoge(arg [3]int) { + arg[0] = 4 + fmt.Printf("%+v\n", arg) // [4, 0, 0] + // 値渡しなので安全だが性能的に非効率なことがある +} diff --git a/array/README.md b/array/README.md new file mode 100644 index 0000000..be7bbf5 --- /dev/null +++ b/array/README.md @@ -0,0 +1,12 @@ +## array.go + +配列 + +## slice.go + +スライス + +## append.go + +append関数の使い方や仕組み + diff --git a/array/append b/array/append new file mode 100755 index 0000000..0425a76 --- /dev/null +++ b/array/append Binary files differ diff --git a/array/append.go b/array/append.go new file mode 100644 index 0000000..cda34dd --- /dev/null +++ b/array/append.go @@ -0,0 +1,24 @@ +package main + +import "fmt" + +func main() { + ary := []int{} + for i := 0; i < 10; i++ { + ary = append(ary, i) + fmt.Printf("%d: %p len:%d cap:%d %v\n", i, ary, len(ary), cap(ary), ary) + } + /* + 0: 0x140000180b8 len:1 cap:1 [0] + 1: 0x140000180e0 len:2 cap:2 [0 1] + 2: 0x1400001e040 len:3 cap:4 [0 1 2] + 3: 0x1400001e040 len:4 cap:4 [0 1 2 3] + 4: 0x14000014100 len:5 cap:8 [0 1 2 3 4] + 5: 0x14000014100 len:6 cap:8 [0 1 2 3 4 5] + 6: 0x14000014100 len:7 cap:8 [0 1 2 3 4 5 6] + 7: 0x14000014100 len:8 cap:8 [0 1 2 3 4 5 6 7] + 8: 0x1400006e000 len:9 cap:16 [0 1 2 3 4 5 6 7 8] + 9: 0x1400006e000 len:10 cap:16 [0 1 2 3 4 5 6 7 8 9] + */ +} + diff --git a/array/append.go~ b/array/append.go~ new file mode 100644 index 0000000..b213107 --- /dev/null +++ b/array/append.go~ @@ -0,0 +1,24 @@ +package main + +import "fmt" + +func main() { + ary := []int{} + for i := 0; i < 10; i++ { + ary = append(ary, i) + fmt.Printf("%d: %p cap:%d %v\n", i, ary, cap(ary), ary) + } + /* + 0: 0x14000134008 cap:1 [0] + 1: 0x14000134030 cap:2 [0 1] + 2: 0x1400013a020 cap:4 [0 1 2] + 3: 0x1400013a020 cap:4 [0 1 2 3] + 4: 0x1400012c080 cap:8 [0 1 2 3 4] + 5: 0x1400012c080 cap:8 [0 1 2 3 4 5] + 6: 0x1400012c080 cap:8 [0 1 2 3 4 5 6] + 7: 0x1400012c080 cap:8 [0 1 2 3 4 5 6 7] + 8: 0x1400013c000 cap:16 [0 1 2 3 4 5 6 7 8] + 9: 0x1400013c000 cap:16 [0 1 2 3 4 5 6 7 8 9] + */ +} + diff --git a/array/array.go b/array/array.go new file mode 100644 index 0000000..9cd6461 --- /dev/null +++ b/array/array.go @@ -0,0 +1,31 @@ +package main + +import "fmt" + +func main() { + var a[3]int // 要素の値を省略したらゼロ値 + fmt.Printf("a: %+v\n", a) // [0, 0, 0] + b := [3]int{1, 2, 3} + fmt.Printf("b: %+v\n", b) // [1, 2, 3] + c := [3]int{1, 2} + fmt.Printf("c: %+v\n", c) // [1, 2, 0] + d := [3]int{2: 2} + fmt.Printf("d: %+v\n", d) // [0, 0, 2] + e := [3]int{0:1, 1: 2} + fmt.Printf("e: %+v\n", e) // [1, 2, 0] + + // 要素が比較可能であればその配列型も比較可能 + fmt.Printf("a==b: %v\n", a == b) // false + fmt.Printf("c==e: %v\n", c == e) // true + // f := [4]int{} + // fmt.Printf("a==f: %v\n", a == f) // compile error: [3]int == [4]int + + hoge(a) + fmt.Printf("a: %+v\n", a) // [0, 0, 0] + // 値渡しなので安全だが性能的に非効率なことがある +} + +func hoge(arg [3]int) { + arg[0] = 4 + fmt.Printf("%+v\n", arg) // [4, 0, 0] +} diff --git a/array/slice.go b/array/slice.go new file mode 100644 index 0000000..705cb07 --- /dev/null +++ b/array/slice.go @@ -0,0 +1,16 @@ +package main + +import "fmt" + +func main() { + s := []string{0:"", 1:"Jan", 2:"Feb", 3:"Mar", 4:"Apr", 5:"May", 6:"Jun", 7:"Jul", 8:"Aug", 9:"Sep", 10:"Oct", 11:"Nov", 12:"Dec"} + fmt.Printf("%d\n", len(s)) // 13(0-12) + fmt.Printf("%+v\n", s[2:4]) // [Feb Mar] + fmt.Printf("%d\n", len(s[2:4])) // 2 + fmt.Printf("%d\n", cap(s[2:4])) // 11(2-12) + fmt.Printf("%+v\n", s[2:7]) // [Feb Mar Apr May Jun] + fmt.Printf("%d\n", len(s[2:7])) // 5 + fmt.Printf("%d\n", cap(s[2:7])) // 11(2-12) + fmt.Printf("%+v\n", s[:]) // [ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec] +} + diff --git a/hello.go b/hello.go index 0cf4e8c..0261c49 100644 --- a/hello.go +++ b/hello.go @@ -2,7 +2,6 @@ import "fmt" - func main() { fmt.Println("Hello, World") } diff --git a/slice.go b/slice.go new file mode 100644 index 0000000..1d533ad --- /dev/null +++ b/slice.go @@ -0,0 +1,9 @@ +package main + +import "fmt" + +func main() { + + fmt.Println("Hello, World") +} +