这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go语言特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 有丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
第一个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 := int64go语言能够自动推导变量的类型 - 循环:只有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三次握手建立连接,再与服务端建立连接。如果连接成功,客户端需要与服务端协商认证方式并完成认证,之后便可以发送中继请求。