Skip to content

Commit f286e1e

Browse files
committed
2023-07-17
0 parents  commit f286e1e

File tree

21 files changed

+404
-0
lines changed

21 files changed

+404
-0
lines changed

chapter_2/hello_world1.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package main
2+
3+
import "pcak1"
4+
5+
func main() {
6+
println("Hello World!")
7+
println(pcak1.Thing)
8+
}

chapter_2/pcak1.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package pack1
2+
3+
4+
var Thing = "Hello World!"

chapter_3/chapter_3.exe

1.88 MB
Binary file not shown.

chapter_3/hello.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
7+
array := [5]int{1, 2, 3, 4, 5}
8+
9+
array_1 := [...]int{1, 2, 3}
10+
11+
array_2 := [5]*int{0: new(int), 1: new(int)}
12+
13+
*array_2[0] = 10
14+
*array_2[1] = 20
15+
16+
fmt.Println("Hello, World!", array, array_1, array_2)
17+
}

chapter_4/4-10/hello.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
// 声明二维数组
7+
var array1 [4][2]int
8+
9+
10+
array1 = [4][2]int{{10,11},{20,21},{30,31},{40,41}}
11+
12+
array2 := [4][2]int{{10,11},{20,21},{30,31},{40,41}}
13+
14+
// 声明并初始化外层数组中索引为 1 个和 3 的元素
15+
array3 := [4][2]int{1:{20,21},3:{40,41}}
16+
17+
// 声明并初始化外层数组和内层数组的单个元素
18+
arry4 := [4][2]int{1:{0:20},3:{1:41}}
19+
20+
fmt.Println("Hello, World!", array1,array2,array3,arry4)
21+
}

chapter_4/4-11/hello.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
// 声明二维数组
7+
var array1 [4][2]int
8+
9+
10+
array1 = [4][2]int{{10,11},{20,21},{30,31},{40,41}}
11+
12+
// 访问二维数组的元素
13+
array1[0][1] = 100
14+
array1[0][0] = 10
15+
16+
fmt.Println("Hello, World!", array1,)
17+
}

chapter_4/4-12/hello.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 同样类型的多维数组赋值
6+
7+
func main() {
8+
// 声明二维数组
9+
var array1 [4][2]int
10+
11+
var array2 [4][2]int
12+
13+
14+
array1 = [4][2]int{{10,11},{20,21},{30,31},{40,41}}
15+
16+
// 访问二维数组的元素
17+
array1[0][1] = 100
18+
array1[0][0] = 10
19+
20+
21+
array2 = array1
22+
23+
fmt.Println("Hello, World!", array1,array2)
24+
}

chapter_4/4-13/hello.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 使用索引为多维数组赋值
6+
func main() {
7+
// 声明二维数组
8+
9+
10+
array1 := [4][2]int{{10,11},{20,21},{30,31},{40,41}}
11+
12+
13+
// 将 array1 的索引为 1 的维度复制到一个同类型的新数组里
14+
var array2 [2]int = array1[1]
15+
16+
17+
// 将外层数组的索引为 1、内层数组的索引为 0 的整型值复制到新的整型变量里
18+
19+
var value int = array1[1][0]
20+
21+
fmt.Println("Hello, World!", array1,array2,value)
22+
}

chapter_4/4-14/hello.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func foo(array [1e6]int){
6+
fmt.Println(array)
7+
}
8+
9+
func main(){
10+
// 声明一个需要8mb的数组
11+
12+
var array [1e6]int
13+
14+
foo(array)
15+
}
16+

chapter_4/4-15/hello.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func foo(array *[1e6]int){
6+
fmt.Println(*array)
7+
}
8+
9+
// 使用指针在函数间传递大数组
10+
func main(){
11+
var array [1e6]int
12+
13+
foo(&array)
14+
}
15+

chapter_4/4-16 slice/hello.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 使用指针在函数间传递大数组
6+
func main(){
7+
8+
// make关键字
9+
// slice1 := make([]string,4,2) //容量小于长度的切片会在编译时报错
10+
slice1 := make([]string,2,4)
11+
12+
// 字面量声明
13+
// 创造字符串切片 长度和容量都是5
14+
slice2 := []string{"Red","White"}
15+
16+
// 创造整型切片 长度和容量都是2
17+
slice3 := []int{1,2}
18+
19+
// 使用索引声明切片
20+
slice4 := []int{99:1}
21+
22+
/* 不管是使用 nil 切片还是空切片,对其调用内置函数 append、len 和 cap 的效果都是一样的 */
23+
24+
// 创造nil切片
25+
var slice5 []int
26+
27+
// 声明空切片
28+
// 1.make
29+
slice6 := make([]int,0)
30+
// 2.字面量
31+
slice7 := []int{}
32+
33+
34+
fmt.Println(slice1,slice2,slice3,slice4,slice5,slice6,slice7)
35+
}
36+

chapter_4/4-17 slice 赋值/hello.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 使用指针在函数间传递大数组
6+
func main(){
7+
8+
slice1 := []int {1,2}
9+
10+
slice1[0] =10
11+
12+
// 使用切片创建切片
13+
14+
15+
slice2 := []int{10,20,30,40,50}
16+
17+
/* 第一个值表示新切片开始的元素的索引位置,这个例子中是 1。第二个值表示开始的索引位置(1),加上希望包含的元素的个数(2),1+2 的结果是 3,所以第二个值就是 3 */
18+
19+
slice2_new := slice2[1:3] //[20 30]
20+
21+
fmt.Println(slice1,slice2,slice2_new)
22+
23+
24+
}
25+

chapter_4/4-18 slice 修改/hello.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 修改切片内容可能导致的结果
6+
func main(){
7+
8+
slice1 := []int {10,20,30,40,50}
9+
10+
// 其长度是 2 个元素,容量是 4 个元素 长度=3-1 容量= slice1容量-1
11+
new_slice1 := slice1[1:3]
12+
13+
// slice1[2] =200
14+
// new_slice1[1] = 1000
15+
16+
fmt.Println(slice1,new_slice1)
17+
18+
// 表示索引越界的语言运行时错误
19+
20+
slice2 := []int{1,2,3,4,5}
21+
22+
new_slice2 := slice2[1:2]
23+
24+
var value int = new_slice2[1]
25+
fmt.Println(slice2,new_slice2,value)
26+
}
27+

chapter_4/4-19 slice 增长/hello.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 修改切片内容可能导致的结果
6+
func main(){
7+
8+
// 其长度为 5 个元素,容量为 5 个元素
9+
slice1 := []int {10,20,30,40,50}
10+
11+
// 其长度为 2 个元素,容量为 4 个元素
12+
new_slice1 := slice1[1:3]
13+
14+
// 使用原有的容量来分配一个新元素
15+
// 将新元素赋值为 60\
16+
17+
new_slice1 = append(new_slice1,60)//由于和原始的 slice 共享同一个底层数组,slice 中索引为 3 的元素的值也被改动了
18+
19+
fmt.Println(slice1,new_slice1)
20+
21+
// 如果切片的底层数组没有足够的可用容量,append 函数会创建一个新的底层数组,将被引用的现有的值复制到新数组里,再追加新的值,如代码清单 4-31 所示。
22+
slice2 := []int{10,20,30}
23+
24+
// new_slice2 := slice2[1:2]
25+
26+
/* 函数 append 会智能地处理底层数组的容量增长。在切片的容量小于 1000 个元素时,总是
27+
会成倍地增加容量 */
28+
new_slice2 := append(slice2,999) //当这个 append 操作完成后,newSlice 拥有一个全新的底层数组,这个数组的容量是原来的两倍
29+
30+
31+
new_slice2=append(new_slice2,111)
32+
new_slice2=append(new_slice2,222)
33+
34+
35+
fmt.Println(slice2,new_slice2)
36+
37+
}
38+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// 修改切片内容可能导致的结果
6+
func main(){
7+
8+
// 其长度为 5 个元素,容量为 5 个元素
9+
slice1 := []string {"Apple","Orange","Plum","Banana","Grape"}
10+
11+
12+
// 将第三个元素切片,并限制容量
13+
// 其长度为 1 个元素,容量为 2 个元素
14+
new_slice1 := slice1[2:3:4] //[i:j:k]
15+
16+
// 长度: j – i 或 3 - 2 = 1
17+
// 容量: k – i 或 4 - 2 = 2
18+
fmt.Println(slice1,new_slice1)
19+
20+
// 设置容量大于已有容量的语言运行时错误 可用容量 5 - 2 = 3
21+
22+
// new_slice2 := slice1[2:3:6] //slice bounds out of range [::6] with capacity 5
23+
// fmt.Println(new_slice2)
24+
25+
// 设置长度和容量一样的好处
26+
27+
source := []string{"Apple", "Orange", "Plum", "Banana", "Grape"}
28+
29+
/* 如果不加第三个索引,由于剩余的所有容量都属于 slice,向 slice 追加 Kiwi 会改变
30+
原有底层数组索引为 3 的元素的值 Banana。不过在代码清单 4-36 中我们限制了 slice 的容
31+
量为 1。当我们第一次对 slice 调用 append 的时候,会创建一个新的底层数组,这个数组包
32+
括 2 个元素,并将水果 Plum 复制进来,再追加新水果 Kiwi,并返回一个引用了这个底层数组
33+
的新切片 */
34+
source_slice := source[2:3:3] //长度和容量一样 : Plum
35+
36+
source_slice = append(source_slice,"Kiwi")
37+
38+
fmt.Println(source,source_slice)
39+
}
40+

chapter_4/4-4/hello.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
7+
array := [5]int{1, 2, 3, 4, 5}
8+
9+
array_1 := [...]int{1, 2, 3}
10+
11+
array_2 := [5]*int{0: new(int), 1: new(int)}
12+
13+
*array_2[0] = 10
14+
*array_2[1] = 20
15+
16+
fmt.Println("Hello, World!", array, array_1, array_2)
17+
}

chapter_4/4-5/hello.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
7+
array := [5]int{1, 2, 3, 4, 5}
8+
9+
array[2] = 35
10+
11+
12+
fmt.Println("Hello, World!", array,)
13+
}

chapter_4/4-6/hello.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
7+
array := [5]*int{new(int),new(int)}
8+
9+
*array[0] =1
10+
*array[1] =2
11+
12+
13+
14+
fmt.Println("Hello, World!", array,)
15+
}

chapter_4/4-7/hello.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
// 把同样类型的一个数组赋值给另外一个数组
7+
8+
var array1 [5]string
9+
10+
array2 := [5]string{"Red","Blue","Green","Yellow","Pink"}
11+
12+
array1 = array2
13+
14+
fmt.Println("Hello, World!", array1,array2)
15+
}

0 commit comments

Comments
 (0)