jack 4 月之前
父節點
當前提交
9bf84ac807

+ 3 - 0
golang-learn/21-if_statement/go.mod

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

+ 17 - 0
golang-learn/21-if_statement/if_statement.go

@@ -0,0 +1,17 @@
+package main
+
+import "fmt"
+
+func isLeapYear(year int) bool {
+	if y := year; y%400 == 0 || (y%4 == 0 && y%100 != 0) {
+		return true
+	}
+	return false
+}
+
+func main() {
+	fmt.Println(isLeapYear(2000)) // true
+	fmt.Println(isLeapYear(1900)) // false
+	fmt.Println(isLeapYear(2024)) // true
+	fmt.Println(isLeapYear(2023)) // false
+}

+ 3 - 0
golang-learn/22-switch_statement/go.mod

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

+ 43 - 0
golang-learn/22-switch_statement/switch_statement.go

@@ -0,0 +1,43 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+)
+
+func main() {
+	// TODO: implement switch statement
+	for {
+		fmt.Printf("输入数字(1 ~ 7), 返回星期几, 输入 q 退出:")
+		reader := bufio.NewReader(os.Stdin)
+		day, err := reader.ReadString('\n')
+		if err != nil {
+			log.Fatal(err)
+		}
+		day = strings.TrimSpace(day)
+		switch day {
+		case "q":
+			fmt.Println("退出程序")
+			return
+		case "1":
+			fmt.Println("Monday")
+		case "2":
+			fmt.Println("Tuesday")
+		case "3":
+			fmt.Println("Wednesday")
+		case "4":
+			fmt.Println("Thursday")
+		case "5":
+			fmt.Println("Friday")
+		case "6":
+			fmt.Println("Saturday")
+		case "7":
+			fmt.Println("Sunday")
+		default:
+			fmt.Printf("输入错误, 请重新输入\n\n")
+		}
+	}
+}

+ 13 - 0
golang-learn/23-for_loops/for_loops.go

@@ -0,0 +1,13 @@
+package main
+
+import "fmt"
+
+func main() {
+	for i := 1; i <= 100; i++ {
+		if i%2 == 1 {
+			fmt.Println(i, "是奇数")
+		} else {
+			fmt.Println(i, "是偶数")
+		}
+	}
+}

+ 3 - 0
golang-learn/23-for_loops/go.mod

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

+ 3 - 0
golang-learn/24-range_loop/go.mod

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

+ 20 - 0
golang-learn/24-range_loop/range_loop.go

@@ -0,0 +1,20 @@
+package main
+
+import "fmt"
+
+func countChars(s string) map[rune]int {
+	counts := make(map[rune]int)
+	for _, c := range s {
+		counts[c]++
+	}
+	return counts
+}
+
+func main() {
+	str := "Hello, 世界! 👋"
+	fmt.Printf("%q\n", countChars(str))
+	fmt.Println("--------------------------------")
+	for k, v := range countChars(str) {
+		fmt.Printf("%q 出现了 %d 次\n", k, v)
+	}
+}

+ 3 - 0
golang-learn/25-goto_labels/go.mod

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

+ 35 - 0
golang-learn/25-goto_labels/goto_labels.go

@@ -0,0 +1,35 @@
+package main
+
+import (
+	"errors"
+	"fmt"
+	"math/rand"
+	"time"
+)
+
+// 模拟一个可能失败的操作
+func mayFail() error {
+	if rand.Float32() < 0.7 { // 70% 概率失败
+		return errors.New("something went wrong")
+	}
+	return nil
+}
+
+func main() {
+	const maxAttempts = 3
+	attempt := 0
+
+RETRY: // ← 标签:跳转点
+	attempt++
+	err := mayFail()
+	if err != nil {
+		fmt.Printf("attempt %d failed: %v\n", attempt, err)
+		if attempt < maxAttempts {
+			time.Sleep(time.Second) // 可选:做点延迟
+			goto RETRY              // ← 关键:跳回标签
+		}
+		fmt.Println("all attempts exhausted, giving up")
+		return
+	}
+	fmt.Printf("success on attempt %d!\n", attempt)
+}