【go语言基础 | 青训营笔记】

242 阅读2分钟

青训营笔记之 “Go语言基础”

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天,第一篇文章就简单讲一下上课学的一些go的基础语法的重点总结。

  1. go的输入输出

    // Print 系列
    fmt.Print()  // 输出
    fmt.Println()  // 输出+换行
    fmt.Printf("%d",x) // 类似c语言// Sprint 系列
    // 把传入的数据生成并返回一个字符串
    s1 := fmt.Sprint()
    ​
    // Scan 系列
    // fmt.Scan 换行符视为空白符
    // fmt.Scanf fmt.Scanf("1:%s", &name)  类似c语言
    // fmt.Scanln 换行结束输入// bufio 系列 (常用)
    reader := bufio.NewReader(os.Stdin)
    s := reader.ReadString('\n') // reader 含多种用法
    
  1. make构造切片

    s := make([]type,len,cap)
    // type 数组类型
    // len 数组默认长度(没赋值的为0)
    // cap 切片的长度
    // 若切片已满可用 append (当len<cap时,len++,当len==cap时,len++,cap++) 
    // a = append(a,1,2)  可以一次增加多个
    
  2. 循环迭代

    for index,value := range s{
        fmt.Println(value)
    }
    ​
    // 省略版
    for _,value := range s{
        fmt.Println(value)
    }
    ​
    // 类c语言
    for index := 0; index < len(s); index++ {
        fmt.Println(s[index])
    }
    
  3. 结构体

    type user struct{
        name string
        password string
    }
    ​
    // 此处函数引用 user ,即为 user 的类成员函数,可直接调用
    func (u user) CheckPassword(password string) bool{
        return u.password==password
    }
    ​
    // main 函数调用方法
    a := user{ name: "hahah", password: "12345" }
    a.CheckPassword("djskdjs")
    
  4. JSON 处理

    var user user1,user2
    buf, err := json.Marshal(user1)  // 序列化  化原结构体为 byte 数组
    fmt.Println(buf)  // 输出结构体的字符串形式
    err = json.Unmarchal(buf, &user2)
    fmt.Println("%#v\n", user2)  // 输出该结构体// 有了json,可以使用 key-value 的模式来更加直观存储数据
    // 访问属性的时候也很简单,在数组中我们使用序列index来访问具体值,而json中则使用key来访问value
    
  5. 时间处理

    now := time.Now()  // 提取现在的时间
    t1 := time.Date(2022,3,27,1,25,36,0,time.UTC)  // 获取日期
    t2 := time.Date(2022,3,27,1,25,37,2,time.UTC)
    t.Year() t.Month() t.Day() t.Hour() t.Minute()  // 得到时间中的部分信息
    diff :=  t2.Sub(t1)  // 得到时间差
    diff.Minutes()  // 全部换算为分钟
    diff.Seconds()  // 全部换算为秒
    t3.err := time.Format("2006-01-02 15:04:05")  // 按照样例格式化时间
    ​
    
  6. 字符串数字转化

    f,_ := strconv.ParseFloat("1.234", 64)  // 64为转换为的数字的精度
    n,_ := strconv.ParseInt("111", 8 , 64)  // 8 为该整数的进制, 若为0, 则为自动推断
    n,_ := strconv.Atoi("2433")  // 自动转换数字
    
  7. 进程信息

    // go run example/20-env/main.go a b c d 示例
    os.Args // [信息 + 数据:a b c d]
    os.Getenv("Path")  // 获取环境变量
    os.Setenv()   // 设置环境变量
    ​
    buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
    // 快速启动子进程以及输入输出