这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

47 阅读4分钟

走进GO语言基础语言|青训营笔记 这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天 一、本堂课重点内容: 1.GO语言上手——基础语言 入门:开发环境,基础语法,标准库 实战:猜谜游戏 命令行词典 SOCKSS代理 2.Go语言上手——工程实践 3.高质量编程与性能调优实践 4.高性能Go语言发行版优化与落地实践 二、详细知识点介绍: 1.fmt是用来输入输出字符串,格式化字符串的包 2.变量: 声明变量的方式: var a="initial" f:=float32(e) 常量 const s string="constant",在goland里constant没有固定数据类型,都是根据上下文自动确定数据类型 3.if-else if后没有() eg. if 7%2 == 0 {} 4.循环 在goland里没有while循环和do-while循环,只有for循环 5.switch分支结构 switch后无() case后无需break终止,case选择后直接跳转出分支结构 case后可以直接用语句写条件分支,无需再使用if-else语句判断 6.数组 数组是一组具有编号,且长度固定的元数序列。由于它长度固定真实场景中很少使用,用得多得是切片 7.切片 切片是可变长度的数组,操作更丰富。 用make创建切片,egs:=make([]string,3) 追加用s=append(s,"d"),要有s=,指向原数组,因为在goland里切片实际上是存储了长度+容量+指向数组的指针,如果不指回去,就会发生扩容,并返回一个新的切片,所以必须赋值回去。 切片操作中s[2:5]是s[2]~s[5]的数据,不包括s[5] s[2:]是从s[2]开始到最后的所有数据 s[:5]是从第一个开始到s[5]的数据,不包括s[5] 8.map 用make创建map类型,eg.m:=make(map[key]value)其中key和int都是数据类型,当定义m:=make(map[string]int)时,赋值时为m["one"]=1,读取时用m["one"],删除时用delete(m,"one"),在map里读取键值对时可以在后面加“ok”判断是否有这个键值对存在。map类型是无序的,在goland里遍历时不会按照字母顺序也不会按照插入顺序,是随机的。 9.range range遍历时会返回两个值,一个是索引,一个是对应位置的值 10.函数 在goland里变量类型是后知的,几乎所有函数都返回两个结果。一个是真正的值,一个是错误信息。 func add(a int, b int) int{}括号后的int表示返回int的数据类型;unc exists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok }表示返回v和ok数据类型 11.指针 指针主要用途就是对常用的参数进行参考 12.结构体 结构体是带类型的字段集合。 定义结构体 type user struct { name string password string } func checkPassword(u user, password string) bool { return u.password == password } 13.结构体方法 func (u user) checkPassword(password string) bool { return u.password == password } 14.错误处理 15.字符串操作 Contains判断一个字符串是否包含另一个字符串 count计算字符串中某个字符的基数 index查找某个字符串的位置 join连接多个字符串 repea重复多个字符串 len获取字符串的长度,一个中文对应多个字符 16.字符串格式化 在goland里可以用%v,%+v,%#v打印任意类型的变量,%#v则有更详细的结果,%.2f可以保留两位小数 17.JSON处理 结构体里每个字段的第一个字母是大写,结构体用json.Marshal()数据化,数据偶变成一个buf(16进制编码),打印时需要转换数据类型string(buf)。 数据化后的字符串可以用json.Unmarshar(buf,&b)反数据化到一个空的变量里。 通常数据化后的字段第一个字母打印出来是大写字母,如果要写在结构体里的字段处加上json:“age” type userInfo struct { Name string Age int json:"age" Hobby []string } 18.时间处理 用now=time.Now()获取当前时间, t2.Sub(t)获取时间段t2-t 可用now.Unix()获取时间戳 19.数字解析 包strconv strconv.ParseInt("111", 10, 64),111代表字符串,10代表进制,如果是0则代表自动推测,64为精度。 strconv.Atoi("123")快速返回数字 strconv.Atoi("AAA")如果输入不合法,则返回错误的信息 20.进程信息 os.Args获取进程在执行时的命令行参数 os.Getenv("PATH")获取环境变量 os.Setenv("AA", "BB")写入环境变量 exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()获取子进程并且输入输出 三、实践练习例子: 四、课后个人总结: 五、引用参考: