这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
0.安装Golang
下载地址:
开发工具:
- VS Code (下载go插件)
- Goland (收费)
运行方式:
- cmd命令行:go run 文件名.go 【参数】
1.基础语法
go语言的语法相对于c/c++和java等而言,非常的简洁
1.import
代码一开始需要import需要调用的包,值得注意的是,import多个包时,需要注意从上往下按字典序排列,否则会报错
顺序,没啥问题:
调换位置,编辑器提示错误:
2.变量的几种初始化方式
3.if、for、switch等语法
相较于C++等,省略了括号,代码更简洁
死循环:for后不加任何条件
4.切片
切片相较于数组而言可以任意更改长度,并且具有更丰富的操作。 切片通过make创建。
s[n1:n2]表示切片s中从n1到n2的所有元素。
更多具体的语法:
参考书: 前言 · Go语言圣经 (studygolang.com)
2.实战
1.猜谜游戏(for循环和if条件判断的使用)
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
设置随机数种子(如果不设置,会导致随机函数返回一个固定的值),然后使用ran.Intn()随机产生一个随机整数
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")
调用os包里的方法读取输入
reader := bufio.NewReader(os.Stdin)
整个主体被包含在一个没有条件的for中,只有猜对数字才能跳出循环(使用break)
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, "\r\n")
guess, err := strconv.Atoi(input)
以上8行代码可用以下2行替代,调用Scanf从标准输入读取数据看起来更加简单
var guess int
_, err := fmt.Scanf("%d", &guess)
go语言中的函数可以返会多个值,如果某个返回值并不需要,可用下划线'_'补位
然后使用if进行条件判断,猜对使用break跳出循环,猜错给出相应的提示信息,然后进入新一轮循环
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
}
}
}
2.在线词典(第三方API的调用)
基于彩云小译fanyi.caiyunapp.com/
Step1
网页中右键->检查->网络(Network) 在网页中使用想要的功能(翻译),然后抓包,找到需要的那个包
Step2
右键抓到的包->复制->cURL(bash)
然后通过Convert curl commands to code (curlconverter.com)将其转换成Go,获得了一个能够通过网站API获取数据的程序代码
这个代码会将所有内容(json格式)以一长串字符串的形式输出,内容看起来很不方便,还需对数据进行进一步处理,
预览->右键内容->复制object
然后通过JSON转Golang Struct - 在线工具 - OKTools将格式转换为go的struct
将json存入这个struct,然后可以选择性地输出需要的内容
为了能够查找其他的单词,需要对request的内容进行修改
根据request的data的结构设计相应的struct
添加变量word,对原来的代码进行修改
**注:**此处有更简单的方法,调用fmt.Sprintf直接修改字符串,非常简洁:
3.SOCKS5代理
代码就是对这样一个连接建立过程的实现,内容较难理解,还有待消化。