这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
走进Go语言基础
整个系列的目录
本课程内容体系
1.简介
示例代码仅用10行就实现了一个服务器
2.Go语言入门
1.开发环境配置
- 安装Go语言
- 配置集成开发环境
2.基础语法
2.1 helloworld
2.2 变量
go语言字符串是内置类型,可以直接通过“+”号拼接 ,也可以用=号比较两个字符串
变量又两种声明方式,一种是用var(可显示类型,也可不显),另一种是:=,直接声明
常量把var改成const就行,go里面的常量没有确定的类型,会自动根据使用的上下文来确定类型(不过示例代码也有显示类型的???)
2.3 if-else
go里面的if没有括号,而且if后面必须接大括号(不能像c或c++一样,把if的语句写到同一行?)
2.4 循环
go里面只有for循环,跟if一样没有括号,从上到下分别是死循环,一般for循环,类似while的循环
2.5 switch
同样switch也不需要括号
而go里面的switch不需要break就会自动跳转
go里面的switch可以使用任意的变量类型,甚至可以取代任意的if-else语句(switch后不直接加变量,在case后面加变量判断,这样比多个if-else嵌套要清晰)
2.6 数组
定义方式与前面提到的变量定义方式差不多,不过数组用得不多,更多地用切片
2.7 切片
可以理解为一个可变长度的数组,通过append扩展长度,通过make来定义,可以取出里面的部分元素,注意 s[2:5]是这个切片第二个到第五个元素(从0开始数,且不包括第五个)
2.8 map
是使用最频繁的数据结构
用make定义,也可直接定义然后直接取值。中括号写入k-v键值对,delete删除k-v对,读取k-v对的时候用ok参数判断k-v对中是否有值存在,go里面的map是完全无序的,遍历的时候不会按照插入顺序输出
2.9 range
可以用range来遍历数组后map,遍历数组会返回两个值,第一个是索引,第二个是对应位置的值,不需要索引的话可以用下划线去啥????听不清。遍历map的话第一个是key,第二个是value
2.10 函数
函数的返回类型是后置的,go里面的函数一般返回多个值,第一个是真正返回的值,第二个是错误信息
2.11 指针
指针的一个主要用途是对传入的参数进行修改,注意调用的时候需要加&符号,而函数内的变量需要加*号
2.12 结构体
type user struct{
name string
passworf string
}
a := user{name:"xxxx",password:"1024"}
结构体跟java中的实体类一样,可以用.去访问里面的参数,结构体的定义方式跟变量一样,也是两种,结构体也可以作为函数的参数,同样有指针和非指针两种用法
2.13 结构体方法
相当于java类中对元素值修改的方法,从普通方法修改为结构体方法的方式为把结构体参数提到前面,加上括号,带指针的结构体方法可以不用写返回值,只是对结构体进行修改
2.14 错误处理
2.15 字符串操作
在strings包里面
2.16 字符串格式化
Println Pringtf %v可以打印任意类型的变量 %+v可以得到更加详细的结果 %#v进一步详细
2.16 json处理
对于一个结构体,只要保证元素的第一个字母为大写,就可以用json.Marshal()函数进行序列化,序列化后悔编程一个byte数组,转为string后即为json,序列化后的变量可以用json.Unmarshal进行反序列化,赋值到一个新的变量 ,序列化出来的字符串是大写字母开头,如上代码row21,如需改成小写的话则需想结构体的age那样写
2.17 时间处理
time.Now() 当前时间 time.Date()构造一个带时区的时间,然后有函数分别获取里面的元素 Sub对两个时间做减法 t.format()格式化一个时间为一个时间字符串,直接传入一个时间样例,也可以用time.Parse()
time.Unix()获取一个时间戳 (?)
2.18 字符串与数字转换
都在strconv包下
把字符串转化为数字,如row12,第二个参数为进制,第三个参数为精度64位
strconv.Atoi() 快速把十进制数字转化为数字 Itoa把数字转化为字符串
2.19 进程信息
在os报下和os/exec包下
用os.Args获取进程运行时的一些命令行参数,如row10中运行,输出为上图,文件会显示a,b,c,d。os.Getenv()和os.Setenv()分别来获取和设置环境变量
exec.Command来快速启动子进程,并获取器输入输出