jack 4 mesiacov pred
rodič
commit
c44eb901ae

+ 34 - 0
golang-learn/16-basic_functions/basic_functions.go

@@ -0,0 +1,34 @@
+package main
+
+import "fmt"
+
+func sumAndDiff(x, y int, f float64, s string) (int, int) {
+	fmt.Printf("%s\n", s)
+	fmt.Printf("测试浮点数: %.3f\n", f)
+	return x + y, x - y
+}
+
+func swap(x, y *int) {
+	*x, *y = *y, *x
+}
+
+func operationPointer(x, y *int) {
+	*x = *x + *y
+	*y = *x - *y
+}
+
+func main() {
+	var x, y int = 10, 5
+	var f float64 = 1.23
+	var s string = "Hello"
+
+	var sum, diff int = sumAndDiff(x, y, f, s)
+
+	fmt.Printf("%d 和 %d 的和是 %d,差是 %d\n", x, y, sum, diff)
+
+	swap(&x, &y)
+	fmt.Printf("交换后 x=%d, y=%d\n", x, y)
+
+	operationPointer(&x, &y)
+	fmt.Printf("操作指针后 x=%d, y=%d\n", x, y)
+}

+ 3 - 0
golang-learn/16-basic_functions/go.mod

@@ -0,0 +1,3 @@
+module basic_functions
+
+go 1.22.2

+ 3 - 0
golang-learn/17-variadic_params/go.mod

@@ -0,0 +1,3 @@
+module variadic_params
+
+go 1.22.2

+ 26 - 0
golang-learn/17-variadic_params/variadic_params.go

@@ -0,0 +1,26 @@
+package main
+
+import "fmt"
+
+func max(nums ...int) int {
+	if len(nums) == 0 {
+		panic("max: at least one argument required")
+	}
+
+	m := nums[0]
+	for _, v := range nums[1:] {
+		if v > m {
+			m = v
+		}
+	}
+	return m
+}
+
+func main() {
+	fmt.Println(max(3, 7, 2, 9, 4))     // 9
+	fmt.Println(max(-10, -5, -1, -100)) // -1
+	fmt.Println(max(42))
+
+	arr := []int{4, 5, 6}
+	fmt.Println(max(arr...))
+}

+ 10 - 0
golang-learn/18-defer_statement/defer_statement.go

@@ -0,0 +1,10 @@
+package main
+
+import "fmt"
+
+func main() {
+	defer fmt.Println(1)
+	defer fmt.Println(2)
+	defer fmt.Println(3)
+	fmt.Println("end")
+}

+ 3 - 0
golang-learn/18-defer_statement/go.mod

@@ -0,0 +1,3 @@
+module defer_statement
+
+go 1.22.2

+ 7 - 0
golang-learn/19-init_function/a.go

@@ -0,0 +1,7 @@
+package main
+
+import "fmt"
+
+func init() {
+	fmt.Println("a.go init")
+}

+ 7 - 0
golang-learn/19-init_function/b.go

@@ -0,0 +1,7 @@
+package main
+
+import "fmt"
+
+func init() {
+	fmt.Println("b.go init")
+}

+ 3 - 0
golang-learn/19-init_function/go.mod

@@ -0,0 +1,3 @@
+module init_function
+
+go 1.22.2

+ 18 - 0
golang-learn/19-init_function/main.go

@@ -0,0 +1,18 @@
+package main
+
+import "fmt"
+
+/*
+每个源文件可以有 任意多个 init 函数;
+同一个文件内的多个 init,按源码出现顺序执行;
+不同文件之间的 init,按文件名字母顺序(a.go、b.go…)执行;
+所有 init 完成后,才进入 main()。
+*/
+
+func init() {
+	fmt.Println("main.go init")
+}
+
+func main() {
+	fmt.Println("main")
+}

+ 27 - 0
golang-learn/20-error_handling/error_handling.go

@@ -0,0 +1,27 @@
+// error_handling.go
+package main
+
+import (
+	"errors"
+	"fmt"
+)
+
+// div 返回 a/b;除零时返回错误
+func div(a, b float64) (float64, error) {
+	if b == 0 {
+		return 0, errors.New("division by zero")
+	}
+	return a / b, nil
+}
+
+func main() {
+	if v, err := div(10, 2); err != nil {
+		fmt.Println("error:", err)
+	} else {
+		fmt.Println("result:", v)
+	}
+
+	if _, err := div(10, 0); err != nil {
+		fmt.Println("error:", err)
+	}
+}

+ 3 - 0
golang-learn/20-error_handling/go.mod

@@ -0,0 +1,3 @@
+module error_handling
+
+go 1.22.2