Go语言基础以及相关一些案列| 青训营笔记

89 阅读3分钟

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


Go语言背景:

1.语法简洁 2.代码风格统一 3.开发效率高

Hello world:

package main
​
import "fmt"func main() {
    fmt.Println("hello world")
}
​

Go的语法:

基本类型:

包括整型,浮点型,复数,布尔值,字符串,byte和rune类型

数组:

长度固定

切片:

长度可变(应用更多)

map:

完全无序,随机顺序输出

range:

用来快速遍历

函数:

和别的语言不一样,变量类型后置,支持多个返回值

实际业务一般都是两个,一个是真正的结果,一个是错误信息

指针:

和c++差不多

结构体:

type DicRequest struct {
    TransType string `json:"trans_type"`
    Source    string `json:"source"`
}

结构体方法:

函数名字前面带有结构体名称一般像(u user)或者(u *user),带指针的一般是对结构体进行修改

错误处理:

常常用if else来处理,函数的返回值里面后面加上个err

input, err := reader.ReadString('\n')

字符串操作:

调用字符串的函数

字符串格式化:

%v打印任意类型变量或者%+v或者%#v更加详细

fmt.Printf("%#v", dictResponse)

json处理:

一般就是去序列化和反序列化

后面案例会有

Go的实战案例:

随机数:

需要加上对随机种子进行初始化:

rand.Seed(time.Now().UnixNano())

demo:

package main
​
import (
    "bufio"
    "fmt"
    "math/rand"
    "os"
    "strconv"
    "strings"
    "time"
)
​
func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    fmt.Println("随机数是:", secretNumber)
    for {
        fmt.Println("请输入一个数字")
        reader := bufio.NewReader(os.Stdin)
        input, err := reader.ReadString('\n')
        if err != nil {
            fmt.Println("输入的数字发生了错误,请重新输入")
            continue
        }
        input = strings.Trim(input, "\r\n")
        guess, err := strconv.Atoi(input)
        if err != nil {
            fmt.Println("无效的数字", err)
            continue
        } else {
            if guess > secretNumber {
                fmt.Println("你输入的数字过大")
                continue
            } else if guess < secretNumber {
                fmt.Println("你输入的数字过小")
                continue
            } else {
                fmt.Println("恭喜你猜中了")
                break
            }
        }
​
    }
​

在线词典:

传入想翻译的内容和随机数传入想猜的数字是一样的

package main
​
import (
    "bufio"
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "strings"
)
​
type DictResponse struct {
    Rc   int `json:"rc"`
    Wiki struct {
        KnownInLaguages int `json:"known_in_laguages"`
        Description     struct {
            Source string      `json:"source"`
            Target interface{} `json:"target"`
        } `json:"description"`
        ID   string `json:"id"`
        Item struct {
            Source string `json:"source"`
            Target string `json:"target"`
        } `json:"item"`
        ImageURL  string `json:"image_url"`
        IsSubject string `json:"is_subject"`
        Sitelink  string `json:"sitelink"`
    } `json:"wiki"`
    Dictionary struct {
        Prons struct {
            EnUs string `json:"en-us"`
            En   string `json:"en"`
        } `json:"prons"`
        Explanations []string      `json:"explanations"`
        Synonym      []string      `json:"synonym"`
        Antonym      []string      `json:"antonym"`
        WqxExample   [][]string    `json:"wqx_example"`
        Entry        string        `json:"entry"`
        Type         string        `json:"type"`
        Related      []interface{} `json:"related"`
        Source       string        `json:"source"`
    } `json:"dictionary"`
}
​
type DicRequest struct {
    TransType string `json:"trans_type"`
    Source    string `json:"source"`
}
​
func main() {
    reader := bufio.NewReader(os.Stdin)
    input, err := reader.ReadString('\n')
    input = strings.Trim(input, "\r\n")
    var word = input
    client := &http.Client{}
    //进行序列化
    request := DicRequest{TransType: "en2zh", Source: word}
    buf, err := json.Marshal(request)
​
    var data = bytes.NewReader(buf)
    //var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
    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")
    req.Header.Set("accept", "application/json, text/plain, */*")
    req.Header.Set("accept-language", "zh-CN,zh;q=0.9,ko-KR;q=0.8,ko;q=0.7")
    req.Header.Set("app-name", "xy")
    req.Header.Set("content-type", "application/json;charset=UTF-8")
    req.Header.Set("device-id", "")
    req.Header.Set("origin", "https://fanyi.caiyunapp.com")
    req.Header.Set("os-type", "web")
    req.Header.Set("os-version", "")
    req.Header.Set("referer", "https://fanyi.caiyunapp.com/")
    req.Header.Set("sec-ch-ua", `"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"`)
    req.Header.Set("sec-ch-ua-mobile", "?0")
    req.Header.Set("sec-ch-ua-platform", `"Windows"`)
    req.Header.Set("sec-fetch-dest", "empty")
    req.Header.Set("sec-fetch-mode", "cors")
    req.Header.Set("sec-fetch-site", "cross-site")
    req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36")
    req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
    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)
    var dictResponse DictResponse
    err = json.Unmarshal(bodyText, &dictResponse)
    if err != nil {
        log.Fatal(err)
    }
    //进行反序列化
​
    fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs)
    for _, item := range dictResponse.Dictionary.Explanations {
        fmt.Println(item)
    }
    //fmt.Printf("%#v", dictResponse)
​
}
​

输入中文,返回结果: 你好 UK: US: how do you do; how are you; hello