后端GO语法基础day1 | 青训营笔记

108 阅读2分钟

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

Go语言入门快速,具有以下特点

1高性能、高并发

2语法简单、学习曲线平缓

3丰富的标准库

4完善的工具链

5静态链接

6快速编译

7跨平台

8垃圾回收

GO基础语法

与其他语言相比

可以用+拼接字符串

g := a + "foo"
复制代码

if语句没有()

if 7%2 == 0 { 
    fmt.Println("7 is even") 
} else {
    fmt.Println("7 is odd") }
复制代码

go中只有for循环

for { fmt.Println("loop") break }
复制代码

switch 不需要加break 也可以根据条件直接判断 代替ifelse

t := time.Now()
switch {
case t.Hour() < 12:
   fmt.Println("It's before noon")
default:
   fmt.Println("It's after noon")
}
复制代码

指针主要用于修改参数值

func add2ptr(n *int) {
   *n += 2
}
复制代码

结构体方法 把(u *user)放到函数签名,可以通过对象.调用方法

func (u *user) resetPassword(password string) {
   u.password = password
}

func main() {
   a := user{name: "wang", password: "1024"}
   a.resetPassword("2048")
   fmt.Println(a.checkPassword("2048")) // true
}
复制代码

Printf中%v可以全格式打印,+v输出更多信息

fmt.Printf("p=%v\n", p)  // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}
复制代码

使用json.MarshalIndent把json转为2进制

buf, err = json.MarshalIndent(a, "", "\t")
复制代码

Atoi字符串转数字ItoA数字转字符串

n2, _ := strconv.Atoi("123") n3 := strconv.Itoa(666)
复制代码

GO实战案例

猜谜游戏主要是熟悉语法的

作业中用Scanf来简化我选择把Scanf放到for循环第一行,但是会出现第二次进入循环时跳过Scanf语句,查资料后发现 Scanf读取了在缓冲区中仍存在上一次输入留下的换行符,于是加入\n解决问题

[原文链接]( Golang——Scanf,Scanln循环多次输入的小坑_golang scanf_多喝氧烷_的博客-CSDN博客)

fmt.Scanf("%s", &input) //第二次读取跳过scanf 
fmt.Scanf("%s\n", &input)

字典案例比较有趣,使用两个在线工具把curl转换为go代码,把JSON转换为go结构体,链接如下

1Convert curl commands to Go (curlconverter.com) 2JSON转Golang Struct - 在线工具 - OKTools

最终完成字典的实现

SOCKS5代理案例帮助我了解go中的网络编程,了解代理协议的流程,增加了知识储备