这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
本节课主要做三个项目,分别是:在线词典、猜数字、SOCKS5代理。
在线词典项目:
第一步:发送HTTP请求
package main
import (
"bytes"
"encoding/json"
"io"
"io/ioutil"
"net/http"
"time"
)
// 发送GET请求
// url: 请求地址
// response: 请求返回的内容
func Get(url string) string {
// 超时时间:5秒
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var buffer [512]byte
result := bytes.NewBuffer(nil)
for {
n, err := resp.Body.Read(buffer[0:])
result.Write(buffer[0:n])
if err != nil && err == io.EOF {
break
} else if err != nil {
panic(err)
}
}
return result.String()
}
// 发送POST请求
// url: 请求地址
// data: POST请求提交的数据
// contentType: 请求体格式,如:application/json
// content: 请求放回的内容
func Post(url string, data interface{}, contentType string) string {
// 超时时间:5秒
client := &http.Client{Timeout: 5 * time.Second}
jsonStr, _ := json.Marshal(data)
resp, err := client.Post(url, contentType, bytes.NewBuffer(jsonStr))
if err != nil {
panic(err)
}
defer resp.Body.Close()
result, _ := ioutil.ReadAll(resp.Body)
return string(result)
}
第二步:JSON解析
为了实现对请求的输入输出流进行序列化和反序列化,我们需要设置结构体DictRequest和DictResponse属性。
第三步:代码生成
网站一:curlconverter.com/go/ 作用:可将curl命令及结果转换为go代码
网站二:oktools.net/json2go 作用:可将JSON转换为go的结构体
猜数字:
第一步:生成随机数
import (
"math/rand"
"fmt"
"time"
)
func main() {
/*
生成随机数random
*/
num1 := rand.Int()
fmt.Println(num1)
for i:=0;i<10;i++{
num := rand.Intn(10) //生成0-9之间的随机数
fmt.Println(num)
rand.Sedd(1)
num2 := rand.Intn(10)
fmt.Println("-->",num2)
t1:=time.Now() //获取当前时间
fmt.Println(t1)
fmt.Printf("%T\n",t1)
//时间戳:指定时间,距离1970年1月1日0点0分0秒,之间的时间差值:秒,纳秒
timeStamp1:=t1.Unix() //秒
fmt.Println(timeStamp1)
timeStamp2:=t1.UnixNano() //纳秒
fmt.Println(timeStamp2)
//step1: 设置种子数,可以设置成时间戳
rand.Seed(time.Now().UnixNano())
for i:=0;i<10;i++{
//step2: 调用生成随机数的函数
fmt.Println("-->",rand.Intn(100))
}
}
第二步:处理字符串,实现标准IO流
1.Split:字符串按照指定分隔符进行拆分,参数1:需要进行拆分的字符串。参数2:按照什么进行拆分
2.Fields:字符串安装空格进行拆分,参数1:需要进行拆分的字符串。返回字符串类型。
3.HaSuffix:判断字符串的结束标记,参数1:匹配的字符串;参数2:以什么后缀名判断。返回布尔类型
4.HasPrefix:判断字符串的起始标记,参数1:匹配的字符串;参数2:以什么为开头判断。返回bool类型
第三步:实现功能逻辑
思路: 设置无限循环,当猜测命中时break跳出循环