Go语言入门以及小Demo | 青训营

69 阅读2分钟

前言

心心念念的青训营终于开始了,今天根据课程,完成了对Go语言的简单入门,感觉还是很优雅的!

自己也跟着老师学了一天,觉得还是很有收获的,下面就简单的记录以及分享一下自己今天的学习

正文

先来说说自己的体会吧,觉得Go语言比较优雅,写起来很帅气

就通过今天自己打的几个Demo来进行一下今天学习的总结吧

HelloWorld

每个语言都有自己的HelloWorld

package main  
  
import "fmt"  
  
func main() {  
    fmt.Println("HelloWorld!")  
}

运行后,就会出现HelloWorld

image.png

神秘数字,猜数游戏

这个Demo主要是猜测一个随机数的demo

最开始生成一个随机数,然后根据用户的输入,提示用户输入的数字是大还是小

最终用户输入正确后,结束进程

    maxNumber := 200  
    secretNumber := rand.Intn(maxNumber)  

这里其实还是有一个小疑问

就是我本地生成随机数的时候,不用指定随机因子,也可以每次输出不同的随机数

Seed方法在我本地显示被废除

这里是不是我的Go版本太高了?

字典

这里边学习到了,结构体的创建以及使用,可以类比于对象这个概念

    // DictRequest 字典请求对象  
    type DictRequest struct {  
        TransType string `json:"trans_type"`  
        Source string `json:"source"`  
    }

序列化对象

    request := DictRequest{TransType: "en2zh", Source: word}  
    //这里json解析后,返回的是一个字节数组  
    buf, e := json.Marshal(request)

反序列化对象


    //先定义一个对象  
    var dictResponse DictResponse  
    //对bodyText进行反序列化,注意这里需要加上&才能进行赋值  
    err = json.Unmarshal(bodyText, &dictResponse)  
    if err != nil {  
        log.Fatal("json反序列化出错")  
    }

发送请求

//创建client
client := &http.Client{}

构建Request对象

req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)  
if err != nil {  
    log.Fatal(err)  
}

关闭流,从流中读取body

defer resp.Body.Close()
bodyText, err := io.ReadAll(resp.Body)  
if err != nil {  
    log.Fatal(err)  
}

循环中遍历元素

_, item中第一个是下标,不用的话可以用_代替

//打印翻译的详情,
for _, item := range dictResponse.Dictionary.Explanations {  
    fmt.Println(item)  
}

这个小项目中,我也自己独立思考结合猜数Demo,将world从系统启动参数改成了用户输入,也算是一个独立的小小思考

Socks5

这个项目,如果大家遇到使用 nc命令无法识别的话

  • 下载nc
  • 解压到一个目录
  • 配置环境变量到该目录
  • 然后重新打开cmd,就可以运行了

结语

总体来说,今天真的收获满满,也体会到了Go语言的魅力,开启一个子线程是如此的简单以及优雅,只需要一个go就可以实现,不过还是需要复习以及回顾今天的一些知识点,通过这两个Demo的编写,自己也更加熟悉了Go语言的一些特性以及写法,明天准备挑战一下作业内容,对两个Demo进行修改,后续也会发文记录~