走进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()获取子进程并且输入输出
三、实践练习例子:
四、课后个人总结:
五、引用参考: