Go语言基础语法以及实战案例 | 青训营笔记

60 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 1 天,今天学习的是Go语言入门以及基础语法,并利用语法进行了简单的实战案例

Go语言的特点

高性能、高并发

语法较为简单

丰富的标准库

完整的工具链

静态链接

快速编译

跨平台

垃圾回收

部署简单,开发成本低

Go的基本语法中略显特别的点

变量声明

对于类型确定的变量,变量声明时,其类型是写在变量名后面的,这与其他语言不太一样

var x int
var y int = 5
const s string = "Golang"

if-else

Go语言的结构通过大括号进行分隔,对于if-else的判断,else语句需要紧跟在其if语句的右括号后边,与其处于同一行中

if ** {
    ****
} else if *** {
    ****
} else {
    ****
}

switch

在其他语言的switch中,case语句是默认贯穿的,而在Go语言中并不是这样,相当于每个case后面自带break语句。如果需要对当前case与下一个case进行贯穿,则需要写上fallthrough语句将case进行贯穿

实战案例

猜谜游戏

猜谜游戏的实现相对比较简单的

最开始需要生成一个随机数,而为了随机数每次生成的数都不相同,需要对随机数的种子进行设置,最好的方法是将时间作为种子。rand.seed()的类型为int64,因此需要对时间进行处理,利用.Unix()函数将时间设置为秒数

rand.Seed(time.Now().UnixNano())
x := rand.Intn(100)

对于每次的读入,我们也需要用简单的err错误打印,对输入的内容进行判断

ip, err := reader.ReadString('\n')
if err != nil {
   fmt.Println("An error occur while reading input, please try again")
   continue
}

在实现程序后,我们可以用提到的scanf对代码进行相应简化

t, err := fmt.Scanf("%d ", &guess)
if err != nil {
    fmt.Println("Invalid input. Please enter an integer value")
    continue
}

在线词典

在线词典是对Go语言第三方api的调用,通过发送http请求,这个可以通过“net/http”包中http相关的函数即可实现。对于请求的生成,需要对curl进行代码生成。在实现请求序列化后,我们要将json转化成结构体,并对结构体进行反序列化,最后输出即可。

SOCKS5代理

还没进行深入学习,不太懂,先不写了