5/7 Go 语言上手 | 青训营笔记

75 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

0.安装Golang

下载地址:

studygolang.com/dl

开发工具:

  • VS Code (下载go插件)
  • Goland (收费)

运行方式:

  • cmd命令行:go run 文件名.go 【参数】

1.基础语法

go语言的语法相对于c/c++和java等而言,非常的简洁

image.png

1.import

代码一开始需要import需要调用的包,值得注意的是,import多个包时,需要注意从上往下按字典序排列,否则会报错

顺序,没啥问题:

image.png

调换位置,编辑器提示错误:

image.png

2.变量的几种初始化方式

image.png

3.if、for、switch等语法

相较于C++等,省略了括号,代码更简洁

image.png

image.png 死循环:for后不加任何条件

image.png

4.切片

image.png

切片相较于数组而言可以任意更改长度,并且具有更丰富的操作。 切片通过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) 在网页中使用想要的功能(翻译),然后抓包,找到需要的那个包

image.png

Step2

右键抓到的包->复制->cURL(bash) image.png 然后通过Convert curl commands to code (curlconverter.com)将其转换成Go,获得了一个能够通过网站API获取数据的程序代码

image.png 这个代码会将所有内容(json格式)以一长串字符串的形式输出,内容看起来很不方便,还需对数据进行进一步处理,

image.png 预览->右键内容->复制object

image.png 然后通过JSON转Golang Struct - 在线工具 - OKTools将格式转换为go的struct 将json存入这个struct,然后可以选择性地输出需要的内容

image.png

image.png 为了能够查找其他的单词,需要对request的内容进行修改

image.png 根据request的data的结构设计相应的struct

image.png 添加变量word,对原来的代码进行修改

image.png **注:**此处有更简单的方法,调用fmt.Sprintf直接修改字符串,非常简洁:

image.png

3.SOCKS5代理

image.png 代码就是对这样一个连接建立过程的实现,内容较难理解,还有待消化。