Go基础篇 | 青训营笔记

58 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

Go语言特点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 有丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

第一个Go程序 Hello World

package main //该文件属于main包

import "fmt" //导入fmt

func main() {
    fmt.Println("Hello World") //输出 Hello World
}

基础语法-注意

  • 运行:使用 go run main.go;编译二进制:go bulid main.go
  • 变量声明:可以使用 f := int64 go语言能够自动推导变量的类型
  • 循环:只有for循环,没有while,do while循环
  • 时间处理:格式化时间使用“2006-01-02 15:04:05”

实战

猜数字游戏

使用fmt.Scanf简化猜数字游戏代码

package main

import (
   "fmt"
   "math/rand"
   "time"
)
func main() {
   maxnum := 100
   //产生一个随机数
   rand.Seed(time.Now().UnixNano())
   secretNumber := rand.Intn(maxnum)

   fmt.Println("please input your guess")

   for {
      var guess int
      _, err := fmt.Scanf("%d", &guess) //输入自己猜测的数
      //错误处理
      if err != nil {
         fmt.Println("please again input:")
         continue
      }
      if guess > secretNumber { //如果猜测的数大于随机数
         fmt.Println("your guess bigger ,please try again")
      } else if guess < secretNumber {//如果猜测的数小于随机数
         fmt.Println("your guess smaller ,please try again")
      } else {
         //猜对随机数停止
         fmt.Println("your guess ture")
         break
      }
   }
}

词典

使用第三方API查询单词翻译并打印出来; 学会使用cul代码生成工具及Json转Golang Struct两个工具

req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data) //创建请求
if err != nil {
   log.Fatal(err)
}
//设置请求头
req.Header.Set("authority", "api.interpreter.caiyunai.com")
...
resp, err := client.Do(req) //发起请求
if err != nil {
   log.Fatal(err)
}
defer resp.Body.Close() //手动关闭流
//读取响应
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
   log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)

SOCKS5 代理

SOCKS5它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,SOCKS5先与客户端进行TCP三次握手建立连接,再与服务端建立连接。如果连接成功,客户端需要与服务端协商认证方式并完成认证,之后便可以发送中继请求。