青训营笔记之 “Go语言基础”
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天,第一篇文章就简单讲一下上课学的一些go的基础语法的重点总结。
-
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 含多种用法
-
make构造切片
s := make([]type,len,cap) // type 数组类型 // len 数组默认长度(没赋值的为0) // cap 切片的长度 // 若切片已满可用 append (当len<cap时,len++,当len==cap时,len++,cap++) // a = append(a,1,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]) } -
结构体
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") -
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 -
时间处理
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") // 按照样例格式化时间 -
字符串数字转化
f,_ := strconv.ParseFloat("1.234", 64) // 64为转换为的数字的精度 n,_ := strconv.ParseInt("111", 8 , 64) // 8 为该整数的进制, 若为0, 则为自动推断 n,_ := strconv.Atoi("2433") // 自动转换数字 -
进程信息
// 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() // 快速启动子进程以及输入输出