这是我参与「第五届青训营 」伴学笔记创作活动的第1天。
一、本堂课重点内容
今天主要学习了Go语言基础,下面是我对今天所学内容的总结。
首先,在众多编程语言中,为什么要选择Go语言:Go语言具有高性能、高并发的特点,相较于其他语言,它的语法简单,学习曲线平缓,部署简单,学习成本低,具有丰富的标准库和完善的工具链。
二、详细知识点介绍
接下来,是对Go语言的基础语法的总结。
程序首行的package表示程序所属的包,package main则表示该文件是程序的入口文件。import用于引入标准库中的包。go run为Go语言程序的运行指令。
Go语言中变量的声明方式有两种:一种是 var 变量名 [变量类型] = 变量值。如果直接在声明时为变量赋值,会自动推断变量类型,无需受到声明。另一种方式为 变量名 := 变量值。常量的定义方式为const 变量名 = 变量值。
条件判断语句if。不同于其他编程语言,Go语言判断条件部分不需要加括号,而if的主体部分必须放在大括号中。
循环语句for。Go语言中只有for这一种循环,格式与java中for循环类似。举例:
for i :=1 ;i < 10; i++{
fmt.Println(i)
}
分支结构Switch。格式与java中for的Switch类似,主要区别为,Go语言的Switch中的case的程序块最后不需要加break。举例:
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
}
数组。定义格式:var 数组名 [数组长度]数组类型{……}。性质与其他编程语言相似。数组在编程中很少使用,因为它的长度是固定的。与之相反的是切片,这是一种可变长度的数组。定义格式:切片名 := make([]数组类型,初始长度)。向切片中添加元素的方法:append()。
map。定义格式:变量名 := make(map[key类型]value类型)。向map中添加元素的方法:变量名[key]=value。从map中取key的方法:变量名,ok := map名[key],如果map中没有key,则为false,反之,则为true。
range关键字。用于遍历数组,map等,例如:
for i,num := range nums{
fmt.Println(num)
}
其中,i和num分别为索引值和对应元素值。
函数。与其他编程语言不同,Go语言的函数定义中,返回值类型是后置的,同时,形式参数的数据类型也是后置的,其他部分类似。
指针。相对于C++,Go语言中的指针用处非常有限,主要用途是用于对传入参数的修改。
结构体。与java的类定义类似,其中可以属性和方法,初始化的方式:变量名 := 结构体名{属性名:value,……}。结构体中的属性和方法的调用方法和java中的类类似。值得注意的是,结构体方法定义在结构体的外面。
错误处理。Go语言中的错误处理直接体现在返回值中,是一个数据类型为error的变量,调用含有error的函数是需要用一个变量去接收错误信息,并在使用函数返回结果之前,通过条件判断语句if判断是否是否产生错误。
此外,还有strings用于进行字符串操作,JSON用于将结构体的实例进行序列化,time用于进行时间处理,strconv用于进行数字解析……
三、实践练习例子
猜谜游戏
实现过程及所用知识:
1.生成随机数:引入time和math/rand包,调用rand.Send(time.Now.UnixNano())初始化随机数种子,再调用rand.Intn(maxNum)生成0到maxNum范围内的随机数。
2.读入用户输入:调用bufio.NewReader(os.Stdin)生成读取用户输入的只读的流。
3.实现游戏循环,加入判断条件,对用户输入的猜测结果进行判断,并给出提示,直到用户猜对结果。
在线词典
1.发送请求的代码生成。使用开发者工具,找到翻译对应的post请求的dict,Copy as cURL,粘贴到代码生成工具中(curlconverter.com/#go),生成用于创建…
2.生成request body,解析response body。
3.对代码进行修改完善,将原本的直接打印JSON字符串反序列化为对应结构体实例,并通过调用用于信息所对应的结构体属性进行打印输出。
四、课后个人总结
因为刚刚开始接触go语言,对于go语言的基础语法,有很多地方容易与之前学的其他编程语言混淆,如if、for、Switch中条件不需要加括号,函数的返回值类型后置……需要通过多进行代码编写实践,才能对知识点更好的掌握。