这是我第一次参加字节青训营,刷帖偶然刷到字节青训营这个活动,搜了一下发现前一天活动正好发出,就报了名。第一节课真是给了我一个小小的震撼,真是纯干货,很干,特别干。
首先关于go语言,高并发,高性能,工具链完善,标准库丰富。光说是体验不到,但是在后面的编程过程中就可以慢慢体会了。
基础语法及常用特性解析
通过第一节课的学习,发现仅论入门而言,go的基础语法确实比较简单,也有可能是有其他语言基础导致的。
基础语法
基础语法这些语言都大差不差,就是各有各的特色,我个人认为go比较具有特色的有四点:
1.常、变量声明:
常量:const name type = value
变量:var name type,也可以不指定类型,让它自己判断var tame = value
2.切片Slice:
可以当作是一个动态的数组,可以直接声明var identifier []type也可以通过makevar slice []type = make([]type, len)或slice := make([]type, len)
3.仅有for循环:
没有while等其他循环方式,只有for,循环体需要使用花括号括起来for 表达式 {}表达式无需括号包裹,for{}表示死循环。
4.switch不用break:
如题
常用特性
目前接触到的不多,defer算一个,课上并没有了解很多,我就在AI练中学问了下豆包MarsCode,特性解释如下:在Go语言中,defer 是一个非常有用的关键字,用于延迟执行函数调用。defer 语句通常用于确保某些操作(如资源释放、日志记录等)在函数返回之前执行,无论函数是如何退出的。
defer 的特性
-
延迟执行:
defer语句会将紧随其后的函数调用推迟到包含defer语句的函数返回之前执行。- 即使函数因为
panic而异常退出,defer语句也会执行。
-
后进先出(LIFO) :
- 如果有多个
defer语句,它们会按照后进先出(LIFO)的顺序执行。也就是说,最后一个defer语句会最先执行,而第一个defer语句会最后执行。
- 如果有多个
-
参数预计算:
defer语句中的函数参数会在defer语句执行时立即计算,而不是在defer函数实际执行时计算。
示例代码
package main
import "fmt"
func main() {
// 第一个 defer 语句
defer fmt.Println("Deferred call 1")
// 第二个 defer 语句
defer fmt.Println("Deferred call 2")
// 第三个 defer 语句
defer fmt.Println("Deferred call 3")
fmt.Println("Main function")
}
输出结果
Deferred call 3
Deferred call 2
Deferred call 1
课后作业
词典
向词典中增加另一种翻译引擎,并实现并行请求两个翻译引擎。这里我使用了课中的彩云和字节自家的火山翻译。主要对源代码进行了以下修改:
1.使用channel接收数据,两个goroutine使用同一个channel,仅输出第一个到达的数据
ch := make(chan string)
go query_caiyun(word, ch)
go query_volcengine(word, ch)
fmt.Println(word, "Explain\n")
fmt.Println(<-ch)
close(ch)
2.query_caiyun(word,ch)中在最后采用以下代码传输数据
explain := ""
for _, v := range dictResponse.Dictionary.Explanations {
explain = explain + v
}
ch <- explain
3.query_volcengine(word,ch)中在最后采用以下代码传输数据
ch <- dictResponse.Translation
对我这个菜鸟来说第一节课输出的知识量不小,通过学习也使我了解到了很多不曾了解到的知识,其中AI练中学这个工具很方便,搭配好的环境拯救了在vscode中输不上数字的我(最后选择了Goland)尤其是提供了准备好的代码可以供我轻松修改,省去了很多麻烦,边学边问拓展了很多知识。