1. 猜谜游戏
虽然老师的每次都一样需要设置随机数种子,但我的版本下不需要设置
package main
import (
"fmt"
"math/rand"
)
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
考察输入输出和循环判断
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
)
func main() {
//生成一个小于100 的随机数
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
for {
//让用户输入一个数字
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("输入错误,重新输入", err)
return
}
input = strings.TrimSuffix(input, "\r\n") //修剪前后缀
guess, err := strconv.Atoi(input) //转换为int类型的guess
if err != nil {
fmt.Println("输入格式错误,重新输入", err)
return
}
fmt.Println("你的猜想是", guess)
if guess < secretNumber {
fmt.Println("你输入的数字小了")
} else if guess > secretNumber {
fmt.Println("你输入的数字大了")
} else {
fmt.Println("你输入的数字正确")
break
}
}
}
2. 在线词典
用go语言发送http请求
curl 'https://api.interpreter.caiyunai.com/v1/dict' \
-H 'authority: api.interpreter.caiyunai.com' \
-H 'accept: application/json, text/plain, */*' \
-H 'accept-language: zh-CN,zh;q=0.9' \
-H 'app-name: xy' \
-H 'content-type: application/json;charset=UTF-8' \
-H 'device-id: eb5a954fac3594d53454ea4feb0a26bc' \
-H 'origin: https://fanyi.caiyunapp.com' \
-H 'os-type: web' \
-H 'os-version;' \
-H 'referer: https://fanyi.caiyunapp.com/' \
-H 'sec-ch-ua: "Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Windows"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: cross-site' \
-H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' \
-H 'x-authorization: token:qgemv4jr1y38jyq6vhvi' \
--data-raw '{"trans_type":"zh2en","source":"你好"}' \
--compressed
代码生成网站:
https://curlconverter.com/
生成go代码:
package main import ( "fmt" "io" "log" "net/http" "strings" ) func main() { client := &http.Client{} var data = strings.NewReader(`{"trans_type":"zh2en","source":"你好"}`) req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data) if err != nil { log.Fatal(err) } req.Header.Set("authority", "api.interpreter.caiyunai.com") req.Header.Set("accept", "application/json, text/plain, */*") req.Header.Set("accept-language", "zh-CN,zh;q=0.9") req.Header.Set("app-name", "xy") req.Header.Set("content-type", "application/json;charset=UTF-8") req.Header.Set("device-id", "eb5a954fac3594d53454ea4feb0a26bc") req.Header.Set("origin", "https://fanyi.caiyunapp.com") req.Header.Set("os-type", "web") req.Header.Set("os-version", "") req.Header.Set("referer", "https://fanyi.caiyunapp.com/") req.Header.Set("sec-ch-ua", `"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"`) req.Header.Set("sec-ch-ua-mobile", "?0") req.Header.Set("sec-ch-ua-platform", `"Windows"`) req.Header.Set("sec-fetch-dest", "empty") req.Header.Set("sec-fetch-mode", "cors") req.Header.Set("sec-fetch-site", "cross-site") req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36") req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi") resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() bodyText, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Printf("%s\n", bodyText) }
SOCKS5代理
原理:
TCP echo
package main // 声明包名为 main
import (
"bufio" // 导入 bufio 包,用于读写数据
"fmt"
"log" // 导入 log 包,用于记录日志
"net" // 导入 net 包,用于网络编程
)
func main() {
server, err := net.Listen("tcp", "127.0.0.1:1080") // 监听本地 1080 端口的 TCP 连接
if err != nil { // 如果监听失败,则抛出异常并终止程序运行
panic(err)
}
for { // 循环等待客户端连接
client, err := server.Accept() // 接受客户端连接请求,并返回一个新的连接对象和错误信息
if err != nil { // 如果接受连接失败,则记录日志并继续等待下一个连接请求
log.Println("Accept failed %v", err)
continue
}
go process(client) // 启动一个新的 goroutine 处理客户端连接请求
}
}
func process(conn net.Conn) {
defer conn.Close() // 在函数结束时关闭连接对象,确保资源被释放
reader := bufio.NewReader(conn) // 创建一个带缓冲的读取器对象,从连接中读取数据
for { // 循环读取客户端发送的数据,并将其原样返回给客户端
b, err := reader.ReadByte()
if err != nil {
break // 如果读取数据失败,则跳出循环并关闭连接
}
fmt.Println(b)
_, err = conn.Write([]byte{b}) // 将读取到的数据写回客户端
if err != nil {
break // 如果写入数据失败,则跳出循环并关闭连接
}
}
}
在cmd中运行: 结果:
(base) PS E:\temp\gotest> nc 127.0.0.1 1080
jlkdasjfklkldas
jlkdasjfklkldas