这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记
1. 基础语法方面
1. Fmt 输出‘+’与‘#’的使用
p := point{1, 2}
fmt.Printf("p= %+v\n", p) // p={x:1 y:2}
fmt.Printf("p= %#v\n", p) // p=main.point{x:1, y:2}
2. Json的处理
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
err = json.Unmarshal(buf, & b)
3.数字解析与转换
package main
import (
"fmt"
"strconv"
)
func main() {
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123") // 字符串转数字
fmt.Println(n2) // 123
n2, _ := strconv.Itoa(123) // 数字转字符串
fmt.Println(n2) // "123"
n2, err := strconv.Atoi("AAA")
fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}
4.进程信息
// go run example/20-env/main.go a b c d
fmt.Println(os.Args) // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
fmt.Println(os.Setenv("AA", "BB"))
//开启子进程 在hosts文件中查找127.0.0.1
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
2. 项目实战方面
1.猜拳游戏
和C差不多, 需要先设定种子seed再进行随机数选取,读取一行数据的方式,还有就是一些错误捕获,主要是用来复习语法方面的知识吧
reader := bufio.NewReader(os.Stdin) //和系统输入进行绑定
input, err := reader.ReadString('\n') //读取一行数据 包括'\n'
input = strings.TrimSuffix(input, "\n") //如果数据以\n结尾,删除'\n'
2.在线词典的实现
Get了一些好用的在线提效工具
1.curlconverter.com
对浏览器请求的,转换为响应语言的请求代码,右键复制为cURL,粘贴到网站中进行代码生成
2.JSON转Golang Struct
1.将负载json转换为结构体
2.将返回json内容转换为结构体
第一个网站用来写响应,但是他提交的内容都是写死的,我没办法输入一个“hello”就查hello,输入“like”就查like,而是在代码中写死了。
第二个网站用来将需要提交的内容提取出来,在代码中添加对应的结构体变量,然后通过捕获命令行的输入来设置变量内容进行查询
此外,当请求响应回来的时候需要提取json中对应的内容,响应直接写入对应的json变量中,提取json结构体变量对应的成员就可以完成解析。
3.SOCKS5
原理
1. 客户端先和代理服务器进行协商,可能需要密码啊之类的
1.1 这里实现的较为简单不需要额外的验证,
2. 之后客户端对Host进行请求都是通过socks5服务器,socks5服务器对客户端的请求进行解析
2.1 与Host建立TCP连接并进行请求
2.2 返回请求到服务器
2.3 服务器写回到客户端
3.作业
作业1
input := ""
fmt.Scan(&input) //读取空格就结束
fmt.Scanf("%s", &input) //完全按照 ""进行读取
fmt.Scanln(&input) //获取一行数据不包括 '\n'
作业2
就比较坑的是有的翻译网站提交的内容是编码过的应该,或者是加密过的?返回的信息也是被修改过的,操作起来不是很方便,文本翻译_机器翻译_在线翻译-有道智云AI开放平台 (youdao.com) 这个的格式比较简单,用表单提交的方式进行post
var data = strings.NewReader(fmt.Sprintf("q= %s&from=Auto&to=Auto", word))
作业3
模仿课程中的context使用
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
//启动两个goroutine一旦一个执行完成运行cancel
//main函数收到后就结束了程序
//这样就实现了谁快谁先输出
go func() {
queryC(word)
cancel()
}()
go func() {
queryY(word)
cancel()
}()
<-ctx.Done()