go语言基础 | 青训营笔记

41 阅读5分钟

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

走进Go语言基础

整个系列的目录

image.png 本课程内容体系 image.png

1.简介

image.png

示例代码仅用10行就实现了一个服务器

image.png

2.Go语言入门

1.开发环境配置

  1. 安装Go语言

image.png

  1. 配置集成开发环境

image.png

image.png

2.基础语法

2.1 helloworld

image.png

2.2 变量

image.png

go语言字符串是内置类型,可以直接通过“+”号拼接 ,也可以用=号比较两个字符串

变量又两种声明方式,一种是用var(可显示类型,也可不显),另一种是:=,直接声明

常量把var改成const就行,go里面的常量没有确定的类型,会自动根据使用的上下文来确定类型(不过示例代码也有显示类型的???)

2.3 if-else

image.png

go里面的if没有括号,而且if后面必须接大括号(不能像c或c++一样,把if的语句写到同一行?)

2.4 循环

image.png

go里面只有for循环,跟if一样没有括号,从上到下分别是死循环,一般for循环,类似while的循环

2.5 switch

image-20230131002221702

同样switch也不需要括号

而go里面的switch不需要break就会自动跳转

go里面的switch可以使用任意的变量类型,甚至可以取代任意的if-else语句(switch后不直接加变量,在case后面加变量判断,这样比多个if-else嵌套要清晰)

2.6 数组

image-20230131004101169

定义方式与前面提到的变量定义方式差不多,不过数组用得不多,更多地用切片

2.7 切片

image-20230131005518646

可以理解为一个可变长度的数组,通过append扩展长度,通过make来定义,可以取出里面的部分元素,注意 s[2:5]是这个切片第二个到第五个元素(从0开始数,且不包括第五个)

2.8 map

image-20230131010257137

是使用最频繁的数据结构

用make定义,也可直接定义然后直接取值。中括号写入k-v键值对,delete删除k-v对,读取k-v对的时候用ok参数判断k-v对中是否有值存在,go里面的map是完全无序的,遍历的时候不会按照插入顺序输出

2.9 range

image-20230131011037776

可以用range来遍历数组后map,遍历数组会返回两个值,第一个是索引,第二个是对应位置的值,不需要索引的话可以用下划线去啥????听不清。遍历map的话第一个是key,第二个是value

2.10 函数

image-20230131013005005

函数的返回类型是后置的,go里面的函数一般返回多个值,第一个是真正返回的值,第二个是错误信息

2.11 指针

image-20230131013424068

指针的一个主要用途是对传入的参数进行修改,注意调用的时候需要加&符号,而函数内的变量需要加*号

2.12 结构体

image-20230131015737113

type user struct{
    name string
    passworf string
}
a := user{name:"xxxx",password:"1024"}

结构体跟java中的实体类一样,可以用.去访问里面的参数,结构体的定义方式跟变量一样,也是两种,结构体也可以作为函数的参数,同样有指针和非指针两种用法

2.13 结构体方法

image-20230131020231800

相当于java类中对元素值修改的方法,从普通方法修改为结构体方法的方式为把结构体参数提到前面,加上括号,带指针的结构体方法可以不用写返回值,只是对结构体进行修改

2.14 错误处理

image-20230131020840026

2.15 字符串操作

image-20230131021333584

在strings包里面

2.16 字符串格式化

image-20230131021546377

Println Pringtf %v可以打印任意类型的变量 %+v可以得到更加详细的结果 %#v进一步详细

2.16 json处理

image-20230131022027843

对于一个结构体,只要保证元素的第一个字母为大写,就可以用json.Marshal()函数进行序列化,序列化后悔编程一个byte数组,转为string后即为json,序列化后的变量可以用json.Unmarshal进行反序列化,赋值到一个新的变量 ,序列化出来的字符串是大写字母开头,如上代码row21,如需改成小写的话则需想结构体的age那样写

2.17 时间处理

image-20230131022739903

time.Now() 当前时间 time.Date()构造一个带时区的时间,然后有函数分别获取里面的元素 Sub对两个时间做减法 t.format()格式化一个时间为一个时间字符串,直接传入一个时间样例,也可以用time.Parse()

time.Unix()获取一个时间戳 (?)

2.18 字符串与数字转换

image-20230131023823715

都在strconv包下

把字符串转化为数字,如row12,第二个参数为进制,第三个参数为精度64位

strconv.Atoi() 快速把十进制数字转化为数字 Itoa把数字转化为字符串

2.19 进程信息

image-20230131024230797

在os报下和os/exec包下

用os.Args获取进程运行时的一些命令行参数,如row10中运行,输出为上图,文件会显示a,b,c,d。os.Getenv()和os.Setenv()分别来获取和设置环境变量

exec.Command来快速启动子进程,并获取器输入输出