DAY1 Go 语言基础语法学习记录 | 青训营

83 阅读4分钟

DAY1

GO基础语法

GO语言的简单介绍(谷歌出品)

高并发,高性能,只需要标准库,稳定

IDE下载,配置开发环境.

1.下载go,国内镜像站

2.安装开发环境(Vscode插件)

Vscode下载go的插件必须手动clone下来放到go路径下,被墙太麻烦,改换golang.

goland import宝时会提示未找到包,提供了import for side-effects的提示。

下划线作用:

当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ " "引用该包。

基础语法熟悉阶段:

可以用 num :=的方式赋值

switchcase语句不会在选择分支后继续向下,而java和go需要手动写break

if判断不需要加小括号,编译阶段会自动忽略

循环只有for循环,没有while和dowhile

在实际中很少用数组,因为长度固定,而大多数时候用的是切片

    s = append(s, "d")
    //追加后必须赋值给原数组
    //slice原理是存储了长度,容量,和指向数组的指针
    //如果容量不够会扩容并返回一个新的slice

Map在java中是Hash

    m := make(map[string]int)
    //创建map

在go中使用频率最为频繁

map完全无序,遍历随机输出

range快速变量,返回的两个值:第一个是索引,第二个是对应位置的值

Go中变量类型后置,例如:

//java
public static int add (int a,int b)
//go,返回值类型也在后边
func add(a int,b int) int{}

Go指针:对传入的参数进行修改.//很像c++

Go中结构体,类比C++

type user struct {
    name      string
    passsword string
}

结构体中方法:类似类成员函数,

普通函数改成结构体方法:

func checkPassword0(u user, password string) bool {
    return u.passsword == password
}//修改前
func (u user) checkPassword(password string) bool {
    return u.passsword == password
}//修改后
tip:如果要进行值的修改,一定记得传入的对象用指针表示,不然是拷贝方式,不能进行对应的修改

Go中的错误处理:

在函数返回值中加上一个参数是error类型,返回两个值。(出现错误可以new一个error对象->errors New("not found"))

Go中字符串操作:

fmt包中的多种方法.

字符串格式化的内容.(好像不太常用?)

Golang中的JSON操作

1.保证结构体中的字段首字母大写

2.在函数中用json.Marshal(tar)方法进行json序列化.

3.会返回一个buf数组.

4.进行string(buf)强制转换为字符串,否则打印出来是16进制的编码

5.序列化后的buf可以用方法json.Unamrshal(buf,&b)进行反序列化到一个变量中。

tips:字段 类型 json:"age"可以把字段名字改成小写。

Golang的时间处理:

now :=time.now()可以获取当前时间

time.Date可以构建一个当前时区的时间

可以用 .day ,.month获取对应的值。

数字解析:

在strconv包下面的一系列方法。

n,_:=strconv.ParseInt("字符串",进制,精度(多少位))

也可用strconv.Atoi("")快速把10进制字符串数转换为数字

Rtoa数字转换为字符串

进程信息:

os.Args获取进程的命令行参数

os.Getenv等方法。

基础实战(也就是一些小程序)

猜谜游戏

1.生成随机数(fmt包和math/rand包)

关键点在于要设置随机数种子(时间种子)rand.Seed(time.Now.UnixNano())

2.生成一个bufio流来操作,进行输入(这里和java的Scanner类似)

readder:=bufio.NewReader(os.Stdin)

3.代码逻辑编写

4.游戏编入循环,猜错continue,猜对break

命令行词典

1.在线词典进行抓包

2.进行请求的发送(用复制的cURL代码生成并转换为go代码请求)

3.获取第三方返回的Respone

4.解析response body

SOCKS5代理服务(需要网络的相关知识)

1.了解SOCKS5代理服务的原理:

不同于常规的三次握手,需要新加协商阶段。

之后由代理服务与Host进行交流,代理服务器再与客服服务器进行请求与响应。

server,err:=net.Listen("tcp","127.0.0.1:1080")

2.简单的TCP echo server(传什么返回什么)

总结:

按照课表进行学习,第一天的学习内容主要是go的基础语法,和三个项目编写,第一个项目只是简单的逻辑判断。第二个和第三项目则涉及到了网络的相关知识,因为还没学习计网的相关知识,在java开发中也是囫囵吞枣,所以理解得并不是很好,总之除了加强实践能力,也要认真学习it内功。