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序列化
- 在浏览器中的找到对应的请求, 将其link copy下来
- 放入curlconverter.com/#go 生成代码
- 通过oktools.net/json2go 可以将json 生成对应语言的结构体
后面的工作就算 利用DictRequest结构体的内容序列化, 用go中的http.NewRequest和http.client.do发起一个新的请求, 之后得到一个返回体
将返回response的body部分反序列化, 而后解析reponse结构体的explation得到对应的解释, 并将其打印出来。
3.3 SOCKS5 代理
原理
- 协商阶段: 主要是和对方确定加密方式,协议版本号, 支持认证的种类
- 握手阶段: 确定是否能够成功建立连接
- 请求阶段
- reay阶段
我们要实现一个不加密的代理
认证阶段
第一步
服务端对于客户端发来的请求需要解析其中的ver:协议版本, NMethod:支持认证的方法数量, Method, 方法。
而后服务端判断这个请求是不是socks5的协议。 创建method的缓冲区