1.1什么是Go语言
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完整的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收 Java和C的结合体
2入门
2.1安装Golang
2.2基础语法
-
入口包 package main
-
变量类型
-
控制语句:
-
ifelse语句:
-
for循环:直接死循环,c循环,while型循环
-
switch分支语句:可以使用任何变量类型,可以取代ifelse语句,不需要有break来终止,它会自动终止跳出
-
数组:
var a [5]int -
切片(使用更多):要把append结构赋值回去
-
slice原理:存储的是 长度 容量 指向数组的指针 执行append操作的时候如果容量不够会发生扩容 并返回一个新的slice 所以必须要赋值回去;
-
可以使用make来指定slice长度;
-
使用copy在两个slice之间进行拷贝数据:
c := make([]string,len(s)) copy(c,s)s[2:5]表示从索引为2到第6个元素但是不包括第6个(索引从0开始); -
不使用make直接声明并初始化:
good := []string{"g","o","o","d"} fmt.Println(good) -
map:使用make创造一个空
map:m:=make(map[string]int)//中括号内是key的类型,int是value的类型; -
写入kv对:
m["one"] = 1 m["two"] = 2 -
读取kv对:
m["one"] -
判断map中是否含有某个kv对:
r,ok := m["unknow"] fmt.Println(r,ok) -
删除kv对:
delete(m,"one") -
不使用make直接声明并初始化:
m2 := map[string]int{"one":1,"two":2} -
range:快速遍历,使代码更加遍历:返回索引和对应的值;
-
遍历数组语法:
nums := []int{2,3,4} sum:=0 for i,num := range nums{ sum += num if num == 2 { fmt.Println("index",i,"num",num) }} -
遍历map语法:
m := map[string]string{"a":"A","b":"B"} for k, v := range m { fmt.Println(k,v) // b B;a A } for k := range m{ fmt.Println("key",k)//key a;key b } -
函数:语法:func 函数名() 函数返回值类型{函数体} (注意:函数返回值类型是或制,可以为多个,第一个为真正返回信息,第i个为错误信息)
-
指针:操作有限,对传入的参数进行修改
-
结构体:
type user struct{ name string password string } -
可以全部定义和初始化,也可以只指定一部分;
-
使用. 进行读取结构体内的值;
-
使用指针可以对结构体进行修改
-
结构体方法:
-
type user struct{ name string password string}func (u user) checkPassword(password string) bool{ return u.password == password}func (u *user) resetPassword(password string) { u.password = password}func main() { a := user{name: "ken", password: "barbie"} a.resetPassword("1024") fmt.Println(a.checkPassword("1024")) //true -
错误处理:可以清晰的知道哪个函数发生了错误,可以用简单的ifelse去处理错误;
-
在函数返回值类型中加一个
error,代表函数可能会返回一个错误,要返回两个值都要返回,如果没有错误就返回一个nil,有错误就返回一个new error eg:return nil,errors.New("Not Found") -
调用有返回错误的函数时,接收变量后边要加上一个err变量,然后要判断err是否存在,不存在才可以进行下一步操作
-
字符串操作:
-
字符串格式化:
-
JSON处理:
-
Golang中JSON操作非常简单,对于已有的字段,只要保证每个字段的第一个字母大写(即Golang里面的公开字段),就可以使用json.Marshal进行序列化操作,同时也可以使用Unmarshal进行反序列化;
-
可以将大写字母变小写 对应字段中加上一个json tag就行
-
时间处理
-
数字解析:strconv.ParseInt("111",10,64) 字符串,进制(0表示自动推测),精度
-
进程信息