go语言基础 | 青训营笔记

58 阅读2分钟

go语言基础 | 青训营笔记

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

go 语言基本语法

这里主要说明记录一些go语言特有的语法:

  • 初始化变量
    // 第一种
    var a int = 1
    var b = 2
    var c string
    // 第二种
    a := 1.0
    
  • if语句的 { 必须和 if 在同一行
    if a%2==0 {
        fmt.Println(a)
    }
    
  • switch语句的case不需要写break
  • slice的数据结构包括一个指向切片的指针,长度和容量
    type slice struct {
        array unsafe.Pointer
        len   int
        cap   int
    }
    
  • map的遍历
      m := map[string]string{"a": "A", "b": "B"}
      for k, v := range m {
         fmt.Println(k, v)
      }
    
  • 特殊的错误处理方式
    _,err =  function()
    if err != nil {
        fmt.Println(err)
        return
    }
    
  • json的序列化json.Marshal()和反序列化json.Unmarshal
  • strconv库主要处理类型转换问题

go语言实战

示例一

使用 fmt.Scanf()代替bufio.NewReader()来简化代码:

func main() {
// ...

var input string
for {
    _, err := fmt.Scanf("%v\n", &input)
    if err != nil {
       fmt.Println("An error occured while reading input. Please try again", err)
       return
    }
    
    guess, err := strconv.Atoi(input)
    
    // ...
}

// ...
}

示例二

主要是对 http 请求进行解析,然后本地创建相应的结构体接收请求返回的数据,然后得到我们想要的翻译结果。

示例三

在这里我主要遇到了一个问题,当我使用socks5代理访问网站时,会出现错误:

image.png

这里主要原因在于我本地使用了梯子,导致DNS修改,我本地解析域名有问题,所以使用socks5h,由socks server解析hostname。

curl -v -x socks5h://localhost:1080 -L www.qq.com

socks5协议:

socks是一种互联网协议,它通过一个代理服务器在客户端和服务端之间交换网络数据。简单来说,它就是一种代理协议,扮演一个中间人的角色,在客户端和目标主机之间转发数据。

虽然socks是代理协议,但是它的数据都是明文传输。

互联网早期,企业内部网络为了保证安全性,都是置于防火墙之后,这样带来的副作用就是访问内部资源会变得很麻烦,socks协议就是为了解决这个问题而诞生的。socks相当于在防火墙撕了一道口子,让合法的用户可以通过这个口子连接到内部,从而访问内部的一些资源和进行管理。

参考链接

课程实例代码

VPN引起的socks代理出问题解决方法