编辑代码

package main
import "fmt"
import "strings"

func main(){
    // 单引号(rune)
    char := 'A'
    fmt.Printf("类型: %T, 值: %d\n", char, char)  // 输出: int32, 65

    // 双引号(string)
    str := "A"
    fmt.Printf("类型: %T, 值: %s\n", str, str)    // 输出: string, A

    // 反引号(raw string)
    raw := `Line 1\nLine 2`                      // \n 不会被转义
    fmt.Println(raw)                             // 输出: Line 1\nLine 2

    testIota()
    testIf()
    testSwith()
    testFor()
    testSliceForRang()
    testSlice()
    testString()
}

func testIota(){
     
    const (
        a = iota * 2
        b
        c = 100
        d = iota * 2
        e
    )
    fmt.Println(a,b,c,d,e)
}

func testIf(){
    x := 1;
    if (x<=1){
        fmt.Println("真小于等于1")
    } else {
        fmt.Println("大于1")
    }
}


func testSwith() {
    num := f()
    switch { // 等价于 switch num := f(); true {
	case num >= 0 && num <= 1:
		num++
	case num > 1:
		num--
		fallthrough // 执行完该分支后,会继续执行下一个分支
	case num == 2:
		num += num
    default:
       num = 0
	}
    fmt.Println("num = ", num);
}

func f() int {
	return 3
}

func testFor() {
    Out:
        for i := 0; i <= 5; i++ {
            for j := 0; j <= 5; j++ {
                if i > j {
                    fmt.Println("i = ", i)
                    continue Out
                }
                fmt.Println(i, j)
            }
        }
}

func testSliceForRang() {
	slice := []int{1, 2, 3, 4, 5, 7, 8, 9}
	for index, val := range slice {
		fmt.Println(index, val)
	}
}

func testSlice() {
    num1,num2 := make([]int,3,5),[]string{"apple", "origan"}
    num1[0], num1[1], num1[2] = 1, 2, 3  // 初始化切片元素
    num1len,num2len := len(num1), len(num2)
    num1cap,num2cap := cap(num1),cap(num2)
    slice1 := num1[:2]
    slice2 := append(num1[2:],num1[:2]...) // append 的第二个参数需要是单个元素而不是切片,使用 ... 展开切片
    fmt.Println("切片1:", num1, " 长度:", num1len, "容量:",num1cap)
    fmt.Println("切片2:", num2, " 长度:", num2len, "容量:",num2cap)
    fmt.Println("slice1", slice1)
    fmt.Println("slice2", slice2)
}

func testString() {
    str := "这是一个字符!"
    // Unicode 码点切片(每个字符固定 4 字节)
    runes1 := []rune(str)
    // 显式类型转换为字节切片、
    //适用于 ASCII 字符(每个字符占 1 字节)。
    //对于 非 ASCII 字符(如中文),一个字符可能占用多个字节(UTF-8 变长编码)。
    bytes := []byte(str)
    fmt.Println("runes1:",runes1)      // 输出 116(Unicode 码点)
    fmt.Println("bytes:",bytes)
    fmt.Println("string(runes1):",string(runes1)) // 这是一个字符!
    fmt.Println("string(bytes):",string(bytes)) // 这是一个字符!


    var dst1,src,_ string
    src = "hello world!"
    runes2 := string(src)
    fmt.Println("runes2",runes2)

    desBytes := make([]byte, len(src))
    copy(desBytes, src)  // 将 src 的字节拷贝到 desBytes
    dst1 = string(desBytes)  // 将字节数组转回字符串
    fmt.Println(src, dst1)   // 输出:this is a string this is a string

    // dst2 = strings.Clone(src) //Go 1.18+
    // fmt.Println(dst2)

    str2 := src + str
    fmt.Println(str2)

    builder := strings.Builder{}
    builder.WriteString(src)
    builder.WriteString(str)
    fmt.Println(builder)
    fmt.Println(builder)
}