Go基础语言 | 青训营笔记

42 阅读2分钟

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

定义

1.高性能,高并发 2.语法简单,类似于C语言 3.丰富的标准库

image.png 4.完整的工具链 5.静态链接,只需要一个可执行文件就可以直接运行 6.快速编译 7.跨平台,交叉编译环境无需配置 8.垃圾回收,不要关注内存的回收问题

环境配置与测试

  1. 访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可
  2. 在VScode中选择Go并进行安装 image.png
  3. 下载github.com/wangkechun/… 测试代码后,在Terminal处运行main.go,存在如下问题,通过[该方式]((186条消息) 解决:go : 无法将“go”项识别为 cmdlet、函数、脚本文件或可运行程序的名称_无法将go识别为_furhacker的博客-CSDN博客)解决后,成功输出hello world。 image.png

语法

go的语法基本上同C/C++。

1.var代表变量,const代表常量,两者都可以不必具体声明其类型,而可以在运行过程中自动推导。

var a = "initial" //自动推导变量的类型

var b, c int = 1, 2

var d = true

var e float64

f := float32(e)  //声明变量的方式

g := a + "foo" //字符串内置类型,直接用'+'号来拼接
fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
fmt.Println(g)                // initialapple

const s string = "constant" //常量,同时没有确定的类型
const h = 500000000
const i = 3e20 / h

2.循环for,和C的循环不同之处在于不要写括号

i := 1
for {
	fmt.Println("loop")
	break
}
for j := 7; j < 9; j++ {
	fmt.Println(j)
}

for n := 0; n < 5; n++ {
	if n%2 == 0 {
		continue
	}
	fmt.Println(n)
}
for i <= 3 {
	fmt.Println(i)
	i = i + 1
}

3.if同for,较C无括号,且无论分支有几行代码,都必须加上大括号

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

if 8%4 == 0 {
	fmt.Println("8 is divisible by 4")
}

if num := 9; num < 0 {
	fmt.Println(num, "is negative")
} else if num < 10 {
	fmt.Println(num, "has 1 digit")
} else {
	fmt.Println(num, "has multiple digits")
}

4.switch 无需break,在匹配一个条件分支后直接跳出来 5.数组 6.切片 可变长度的数组 (186条消息) Go的json解析:Marshal与Unmarshal_滢光点点的博客-CSDN博客_go json.marshal

示例

简易字典

进入彩云翻译网站,右击->检查->网络->translator->标头,获取发送的http报文信息

image.png 点击负载,观察到待翻译的词语为good,翻译类型为自动到中文

image.png 在translator处右击选择复制

image.png 得到如下所示的内容

image.png 使用如下方式将curl转化为go

image.png

2.从response中提取信息并显示出来 思路:将返回的json串反序列化为一个结构体,该结构体使用oktools.net/json2go 进行辅助转化。

type DictResponse struct { Rc int json:"rc" Wiki struct { KnownInLaguages int json:"known_in_laguages" Description struct { Source string json:"source" Target interface{} json:"target" } json:"description" ID string json:"id" Item struct { Source string json:"source" Target string json:"target" } json:"item" ImageURL string json:"image_url" IsSubject string json:"is_subject" Sitelink string json:"sitelink" } json:"wiki" Dictionary struct { Prons struct { EnUs string json:"en-us" En string json:"en" } json:"prons" Explanations []string json:"explanations" Synonym []string json:"synonym" Antonym []string json:"antonym" WqxExample [][]string json:"wqx_example" Entry string json:"entry" Type string json:"type" Related []interface{} json:"related" Source string json:"source" } json:"dictionary" }

1.握手/协商三个阶段 (1)协议版本号,认证方式等等 (1.1)返回挑选的认证方式 2.认证阶段 3.请求阶段 connect请求,代理和后端服务器建立连接 4.relay阶段 由代理服务器代理客户和主机之间的交流

image.png

完成echo服务器时,出现如下所示的问题导致无法测试

image.png

powershell提示无法将“”项识别 - 大耳朵小虎 - 博客园 (cnblogs.com)

附: ‌⁢⁡⁤​⁡⁡‬⁤⁣⁣‌⁢⁡⁤‬⁡​‍⁢⁤⁡⁡​⁤‬‍⁡⁣​⁣​​​⁢⁢‍⁢‍​⁢⁢⁢‬​‌⁡Go 语言学习路线图 - 飞书云文档 (feishu.cn)