Go语言实战案例| 青训营笔记

58 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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跳出循环