Go学习 Day-02

上一期学习进度

demo1() // 九九乘法表,基本输出
demo2() // 简单计算器,键盘输入和基本输出
demo3() // 递归法阶乘,主要观察形参和返回值
demo4() // 字符串操作,字符串相关操作
demo5() // 自定义类型(结构体)map键值对的使用
demo6() // 指针简单实例,指针的操作
demo7() // 变量交换,形参的传递,地址相关

详细参见文章:

Go学习 Day-01引言 最近刷抖音听说Go语言是不推荐小白学习的,自认为能力还算可以,想要挑战一下,大概的了解了一下基本语法,感觉和C差不多,又和Python有点…2022 年 12 月 03 日

今天的大纲

demo1() // 读文件
demo2() // 写文件
demo3() // 数组操作
demo4() // 基本运算符
demo5() // 循环结构,goto语句
demo6() // 可变长度数组--切片

代码

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
    "time"
)

func demo1Func1() {
    // 全部都加载到内存
    data, err := os.ReadFile("golang/day02/day02.go")
    if err != nil {
        log.Fatal(err)
    }
    os.Stdout.Write(data)
}
func demo1Func2() {
    // 逐行读文本
    file, err := os.Open("golang/day02/day02.go")
    if err != nil {
        log.Fatal(err)
    }
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

}
func demo1() {
    demo1Func1() // 全部都加载到内存
    demo1Func2() // 逐行读文本
}
func demo2Fun1() {
    text := "1234567890abcdefgABCDEFG\n你好,世界"
    //OpenFile(path, type, permissions) 也就是读、写、只读那些,权限就是421的那个ReadWriteX(execute)
    open, err := os.OpenFile("golang/day02/day02.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
    if err != nil {
        log.Fatal(err)
    }
    _, err = open.Write([]byte(text))
    if err != nil {
        return
    }
}
func demo2Fun2() {
    text := "你好,世界\n1234567890abcdefgABCDEFG"
    file, err := os.OpenFile("golang/day02/day02_1.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
    if err != nil {
        log.Fatal(err)
    }
    w := bufio.NewWriter(file)
    w.WriteString(text)
    w.Flush()
}
func demo2() {
    start_f1 := time.Now()
    demo2Fun1() // 直接写文件
    start_f2 := time.Now()
    demo2Fun2() // 通过bufio模块写文件
    start_f3 := time.Now()
    fmt.Println("文件写入效率对比:\n" +
        "\t方法1:" + start_f2.Sub(start_f1).String() + "\n" +
        "\t方法2:" + start_f3.Sub(start_f2).String())
    /*
       文件写入效率对比:
          方法1:1.0488ms
          方法2:505.3µs
    */
}
func demo3() {
    var array [9][9]int // 9 是数组的长度,这么说,这样定义也就是二维数组
    for i := 0; i < 9; i++ {
        for j := 0; j < 9; j++ {
            array[i][j] = (i + 1) * (j + 1)
        }
    }
    for i := 0; i < 9; i++ {
        fmt.Println(array[i])
    }
    var array2 = [9]int{1, 4, 7}
    fmt.Println(array2) // 没有初始化的默认值为0
    var array3 = [...]int{1, 2, 3, 4}
    //array3[4] = 4 // [...]是让编译器自己往里面写数,实际上长度为4,从0开始,第四个也就越界了。
    fmt.Println(array3)
    const size = 8 // 常量定义
    var arr [size]int
    arr[0] = 1
    arr[1] = 1
    for i := 2; i < size; i++ {
        arr[i] = arr[i-2] + arr[i-1]
    }
    fmt.Println(arr)
}
func demo4() {
    fmt.Println("1+1=", 1+1)
    fmt.Println("1-1=", 1-1)
    fmt.Println("2*3=", 2*3)
    fmt.Println("4/2=", 4/2)
    fmt.Println("4/3=", 4/3)
    fmt.Printf("4/3.0==%.2f\n", 4/3.0) // 保留两位小数
    fmt.Printf("4%%3==%d\n", 4%3)      // 保留两位小数
    a := 1
    a++
    fmt.Println("a>1?", a > 1)
    fmt.Println("2<<3", 2<<3) // 2 * 2^3
    fmt.Println("8>>2", 8>>2) // 8 / 2^2
    //--a  // 不支持先行运算

}
func demo5() {
    for i := 0; i < 9; i++ {
        if i == 5 {
            break
        }
        fmt.Println(i)
    }
    flag := 0
label:
    {
        flag++
        println("goto label")
    }

    for i := 0; i < 9; i++ {
        fmt.Println(">>", flag, i)
        if i == 5 && flag < 5 {
            goto label
        }
    }
    // for 和 while 使用了同一个关键字哈
    for true {
        // 死循环
        second := time.Now().Second()
        if second%2 == 0 {
            fmt.Println("当前秒数为奇数,跳出循环")
            break
        } else {
            fmt.Println("当前秒数为偶数,死循环")
        }
    }

}
func demo6() {
    var s = make([]int, 0)
    s = append(s, 2)
    s = append(s, 4)
    s = append(s, 6)
    s = append(s, 8)
    s = append(s, 10)
    fmt.Println(s)
    fmt.Println(s[2])
    var st = make([]int, 0)
    st = append(s[:2], s[3:]...) // 删除元素就有点麻烦了,不知道有没有工具类,直接操作的
    fmt.Println(st)
}
func main() {
    demo1() // 读文件
    demo2() // 写文件
    demo3() // 数组操作
    demo4() // 基本运算符
    demo5() // 循环结构,goto语句
    demo6() // 可变长度数组--切片
}

疑问&解答

nil

记录

nil

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。