前言
自己第一次参加青训营,也是第一次接触go语言,经过几天的学习,现阶段自己的学习总结如下 :
一.对go语言初感受
首先自己作为小白,并没有接触过C语言,在开始之初,自己通过网络查询了解go,对于go语言自己有了一个最初印象: Go语言是一种开源的静态类型编程语言,由Google开发,它具有简洁,高效和并发性强的特点,适用于建可靠,高性能的软件系统。
通过学习后,我的感受就Go语言是比较清晰理解的,现阶段学习起来比较容易,另外它还具有丰富的标准库,完善的工具链(编译,代码格式化,代码测试等等),跨平台等特性,而且具有和c++,java可以媲美的性能。
二. 对go语言基础语法的感受
在学习后,感觉Go语言的基础语法与c语言类似,不需要显示地分号来结束语句
举一个简单的“Hello word”的例子
package main
import “fmt”
func mian() {
fmt.Println("Hello World")
}
代码中package定义一个包 “main”使用go.run或go build直接运行
import是导入本文件所需要的包 “fmt"
"mian"函数是每一个可执行程序所必须包含含的,一般是在启动后第一次执行的函数
go运行代码的方式有两种,一种是直接运行,另一种是编译生成可执行文件再运行:
直接运行:go run main.go
编译运行:go build mian.go
通过初次学习go语言的基础语法和编译简单的""Hello word"文件,让我感觉go有种C语言的java互相结合的感觉,整体上给人简洁的编译感觉.在我看来,Go所具有的思想,是简洁的,是纯粹的,是组合的核心思想。编程现在就是化繁为简,充分利用组合的思想可以让我们的开发模型和项目代码大大简化、返璞归真 。Go的编程思想充分体现这点,而且在程序编译后仅仅生成一个可执行的二进制文件,非常方便.
三.对go语言实践的感受
eg.猜谜游戏
项目概要:
玩家需要猜测随机生成的一个数字,直到猜对为止.
生成一个1到100的随机整数作为答案
玩家从控制台输入整数进行对比
若两者相同则输出"成功"游戏结束,若不同则给出提示,重新猜测.
代码讲解:
package main
import (
"fmt"
"math/rand"
)
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
首先,我们定义一个随机数,作为要猜的的数.
通过调用rand库中的函数来实现,声明一个整数变量maxNum,并将其初始化为100,表示猜测的数字,再声明一个整数变量secrectNumber,创建一个随机数字. 然而在生成随机数时多次生成一样的结果,所以 需要设定实践戳种子.
package main
import (
"fmt"
"math/rand"
"time"
)func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber) }
接下来需要我们用户输入;
package main import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err) return
}
input = strings.TrimSuffix(input, "\n")guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
return
}
fmt.Println("You guess is", guess)
}
bufioi提供带缓冲的I/O操作,更好的处理输入输出
os提供操作系统的交互功能
strconv用于字符串的基本数据类型之间的转换
strings包用于提供处理字符串
通过标准输入读取用户输入的字符串,然后去掉换行符,并将其转化为数字 根据自己操作系统的选择换行符 eg.windows时\n\r.
package main import (
"bufio"
"fmt" "math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNum := 100 rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.TrimSuffix(input, "\n")guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again") } else {
fmt.Println("Correct, you Legend!")
break
}
} }
然后我们可以对结果进行判断,同时为了游戏一直进行,我们加入for循环,从输入开始循环,直到输出正确结果(将出现对比错误时的break改成continue,确保循环).
通过课程中的三个实例的课程,我们学习了go语言的随机数生成,时间处理,字符串转换,类型转换,也实践了循环,switch的运用,巩固我们go语言的基础知识,慢慢从生疏走到熟练,掌握很多未知包的管理和导入,更好的深入学习go语言.
四.学习中所遇到问题
1.对于新手来说,首先就是配置go语言的编译环境问题,在vscode中配置中,对GOPATH很难理解清楚,我也是迷糊了一段时间,在浏览资料下,在默认的GOPATH下的src中存放项目问题得以解决.
2.对于go语言编译所需的工具无法下载问题,通过交流问答,解决问题成功下载,顺利运行程序.