go语言基础上手| 青训营笔记

84 阅读2分钟

goland语言上手-基础语言

执行

go run 直接执行

go build 能够生成二进制文件


基础语法

基础语法 变量

变量的声明

var a = "initail" // 能够自动推导变量的类型
var a int = 1     // 显式类型

基础语法 if else

if else 没有括号, else紧接大括号

基础语法 数组|切片

var a [4]int

这样生成固定长度的数组


比起数组, 更加常使用切片

s := make([]string, 4)

基础语法 -- 字符串格式化

可以直接通过%v实现各种类型的格式化。 %+v, 得到更加详细, %#v 更加详细

基础语法 -- json

要保证序列化的结构体的成员要大写, 也就是公有

json.Marshal(a) // 序列化
json.Unmarshal(buf, &b) //将buf的二进制反序列化

基础语法 -- 进程信息

package main

import (

    "fmt"
    "os"
    "os/exec"
)

func main() {

    // go run example/20-env/main.go a b c d

    fmt.Println(os.Args)           // 
    fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
    fmt.Println(os.Setenv("AA", "BB"))
    buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()

    if err != nil {
        panic(err)
    }

    fmt.Println(string(buf)) // 127.0.0.1       localhost
}

3 实战

3.1 随机数

3.2 在线词典介绍

用第三方的api查询单词的翻译, 并且打印出来

  • 学习发送http请求
  • json序列化
  1. 在浏览器中的找到对应的请求, 将其link copy下来
  2. 放入curlconverter.com/#go 生成代码
  3. 通过oktools.net/json2go 可以将json 生成对应语言的结构体

后面的工作就算 利用DictRequest结构体的内容序列化, 用go中的http.NewRequest和http.client.do发起一个新的请求, 之后得到一个返回体

将返回response的body部分反序列化, 而后解析reponse结构体的explation得到对应的解释, 并将其打印出来。

3.3 SOCKS5 代理

原理


  • 协商阶段: 主要是和对方确定加密方式,协议版本号, 支持认证的种类
  • 握手阶段: 确定是否能够成功建立连接
  • 请求阶段
  • reay阶段

我们要实现一个不加密的代理

认证阶段

第一步

image.png

服务端对于客户端发来的请求需要解析其中的ver:协议版本, NMethod:支持认证的方法数量, Method, 方法。

而后服务端判断这个请求是不是socks5的协议。 创建method的缓冲区