DAY1:Go语言基础|青训营笔记

58 阅读3分钟

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

一、本堂课重点内容:

  • 介绍Go语言基础语法
  • Go语言实战上手练习

二、详细知识点介绍:

  • 首先讲解了Go语言的基本特性。Go语言使用简单,易于上手,有过其他语言使用经历的话很容易上手。Go语言本身轻便、高效,对于开发者而言十分友好。
  • 然后通过举例讲解了Go语言的基本语法。从最简单的一个HelloWorld示例代码开始,到变量、数组、切片、Map、函数、结构体等,除此之外,还介绍了一些在实际开发过程中使用较多的功能,如json、time、进程信息查看等等。
  • 最后是用三个实际程序例子来帮助上手Go语言。

三、实践练习例子:

  • 猜数游戏。 程序启动时计算机生成一个随机数,用户每次输入一个数,计算机判断其是大了或是小了,亦或是正好,并给出输出。当用户猜到那个随机数时程序结束。

    该程序有几大要点:

      1. 随机数生成。生成随机数时要导入math/rand包,并在生成随机数前指定随机数种子,否则每次生成的随机数都会相同,种子一般使用当前时间的时间戳。
      1. 用户输入。可以使用bufio输入流来读取一行的输入,需要注意结尾的换行符是否需要,按需删除。读入的字符串使用Atoi来转换成数字。
      1. 循环与结束条件。使用for来进行循环,没有猜到或是输入错误都有相应的提示并continue;猜到随机数结束程序。
  • 在线简易字典。 用户输入查询词,通过网上查询的方式获得单词的发音、释义。编写过程中需要配合一些curl转换、json转换网站来简化编写过程。

    该程序有几大要点:

      1. 在网页检查中找到post请求并获得其curl,使用工具Convert curl commands to Go (curlconverter.com)来获得请求的主体结构。
      1. 自己定义结构体来对应post请求中传递的值,将其使用json.marshal转换成json格式流式传入。
      1. 使用工具JSON转Golang Struct - 在线工具 - OKTools来从json格式方便地获取结构体。这样可以将返回的json数据一一对应到结构体变量中,也符合Go语言的风格。
      1. 最后将该函数独立为一个工具函数,通过主函数调用。打印的值更换为自己想要的数据。要注意在获得response响应时最好先进行状态判断,若是403、404等状态码时可以直接在此处输出异常,便于排查错误。
  • socks5代理。讲解了socks5代理服务器的原理。具体实现上分为以下几步:

      1. TCP回显。最基本的回显请求,测试是否能正常接收回显tcp请求和消息。
      1. 与代理服务器建立连接。需要按照协议格式读取报文。此步可以返回scok5协议版本和支持的认证方法。
      1. 代理服务器与真实目标的连接函数。关键在于根据ATYP判断后续内容是什么,使用switch一一处理。
      1. 开辟多个go routine来传输,注意传输方向。使用context的withCancel方法可以使一方关闭连接时整体程序结束。

四、课后个人总结:

  • scanf和bufio都可以进行输入,scanf简洁,bufio操作更细。多行输入需要在scanf的字符串中加入"\n",bufio需要注意结尾处的换行符。
  • 结构体中成员名需要开头大写,其后可以添加json的tag来让其在json转换时使用指定的名称。
  • printf中的%#v可以输出更为详细的信息。
  • os.Args中第一个元素是使程序运行的命令,从第二个开始才是命令后的参数