package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir(".")))
http.ListenAndServe(":8080", nil)
}
hello world
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
> go run main.go
Hello, world!
> go build main.go
> ./main
Hello, world!
数组:
- var a [5]int
- b := [5]int{1, 2, 3, 4, 5}
切片:
- s := make([]string, 3)
map:
- m := make(map[string]int)
- r, ok := m["unknow"]
- delete(m, "one")
range:
- 返回:索引、对应位置的值
- 不需要索引,可以用下划线代替
字符串格式化:
- %+v 打印详细结果
- %#v 打印更详细的结果
Json
- 对于结构体,保证字段的首字母大写,即可使用 json.Marshaler(a) 序列化为 JSON 字符串
- 反序列化:json.Unmarshaler(buf, &b)
- 格式化输出:buf, err = json.MarshalIndent(a, "", "\t")
时间:
- 格式化:fmt.Println(t.Format("2006-01-02 15:04:05"))
- 相减:t2.Sub(t)
time.Parse把时间字符串转换为Time,时区是UTC时区 // 2022-03-27 01:25:36 +0000 UTC- golang的时区和神奇的time.Parse - 简书 (jianshu.com)
数字解析
- strconv.Atoi 字符串2数字
- strconv.itoA 数字2字符串
生成随机数:使用时间戳来初始化随机数种子
- rand.Seed(time.Now().UnixNano())
- secretNumber := rand.Intn(maxNum)
读取用户输入:
- import "bufio"
- reader := bufio.NewReader(os.Stdin)
- input, err := reader.ReadString('\n') 读取一行输入
- input = strings.Trim(input, "\r\n") 去除换行符
代码生成:
-
浏览器请求,右键 copy as curl (bash) 可以得到 json 字符串
-
代码生成网站:curlconverter.com/#go
-
创建请求:
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/translator", data) -
设置请求头:
req.Header.Set("xxx","xxx") -
发起请求:
resp, err := client.Do(req)- 手动关闭:
defer resp.Body.Close()
- 手动关闭:
-
读取响应:
bodyText, err := io.ReadAll(resp.Body)
-
在线词典:
-
生成请求
client := &http.Client{} request := DictRequest{TransType: "en2zh", Source: "good"} buf, err := json.Marshal(request) if err != nil { log.Fatal(err) } var data = bytes.NewReader(buf) req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
-
解析 response body
-
写一个结构体,把返回的 json 反序列化到结构体里面
-
json2go 的解析网站:oktools.net/json2go
var dictResponse DictResponse // 定义结构体 err = json.Unmarshal(bodyText, &dictResponse)
-
SOCKS5 代理
-
SOCKS5 代理可以让授权的用户通过单个端口去访问内部的所有资源
-
设置代理服务器后访问网站的过程:浏览器和 socks5 代理建立 TCP 连接,代理和服务器建立 TCP 连接
- 握手:浏览器向 socks5 代理发送请求,socks5 选择一个认证方式返回给浏览器
- 认证
- 请求:浏览器向 socks5 代理发起连接请求,代理服务器和后端服务器建立 TCP 连接,收到响应
- relay:浏览器发送请求,代理转发请求
-
TCP echo server
- 监听端口:
server, err := net.Listen("tcp", "127.0.0.1:1080") - 接收请求:
client, err := server.Accept() - 处理连接:
go process(client),参数类型是 net.Conn
- 监听端口:
依赖的演进:
- GOPATH, Go Vendor, Go Module