这是我参与「第三届青训营 -后端场」笔记创作活动的的第 1 篇笔记 ~
前言
(笔记编辑的界面很喜欢💗,和markdown语法很相近,编辑、预览、目录的三层视图 really convenient!! 期待出笔记📒客户端)
学习了Go语言的基础知识,通过几个小项目快速上手。学习内容脉络图如下~
journey
title Go basics
section Introduction
Characteristics: 5: Me, Teacher
Hello World: 5: Me, Teacher
Examples: 5: Me, Teacher
section Projects
Guessing game: 5: Me, Teacher
Simple dictionary: 5: Me, Teacher
Proxy: 3 :Teacher
Characteristics
-
高性能、高并发
-
语法简单、学习曲线平缓
-
丰富的标准库
-
完整的工具链
-
静态链接
-
快速编译
-
跨平台
-
垃圾回收机制
Attention
没有固定类型,会根据使用的类型自动确定。
Examples
Hello world
main包是程序的入口包
导入标准库的 fmt包,主要是用来往屏幕输入输出字符串、格式化字符串 fmt.Println("hello world")
go build可以编译成二进制
var
var name = value
name :=
常量
const a = 1000
赋值 :=
判断 ==
for循环
if else
if的条件不加括号、结果和条件不能写在同一行
if的条件之间用 ; 分隔
switch分支
不会去跑其他分支
可以用任意字符类型
t := time.Now()
switch{
case t.Hour() < 23:
fmt.Println("Good afternoon")
default:
fmt.Println("xxx")
}
数据结构
数组
a := [5]int{1, 2, 3, 4, 5}
切片(更常用)
创建 make s := make([]string, 3)
增加元素 append(需要结合数值)s = append(s, "d")
左闭右开
map
哈希/字典 m := make(map[string]int)
key、value
完全无顺序,多次遍历的返回值可能不同
range快速遍历
ok bool 返回是否存在
指针
修改参数
类型匹配写法特殊
结构体
类似java中的class
type user struct {
name string
password string
}
func main() {
a := user{name: "wang", password: "1024"}
}
func checkPassword(u user, password string) bool {
return u.password == password
}
错误处理
返回当个返回值
函数值里面增加 err error
接收的时候需要写两个参数
打印
%v可以打印出任何类型
%#v可以打印出最详细的信息
一些jason指令
buf, err := json.Marshal(a)
//把对象转换成字节码
var b userInfo
err = json.Unmarshal(buf, &b)
//解析成对象,所以是按 Age 输出
Projects
猜谜游戏
v1 用 rand.Intn(maxNum)(生成 maxNum 以内的随机数)
v2 设置随机数种子后,让每次生成的值都不一样,加上一行:
rand.Seed(time.Now().UnixNano())
v3 读取输入的数据:
reader := bufio.NewReader(os.Stdin)
//上面方便读取
v4 增加判断逻辑
v5 把return换成continue,让游戏可持续。
其中蕴含错误处理的思想,当用户输入不符合要求的值时,提示输入错误。
终端翻译器
学习了网站抓包、copy cURL,让终端发送请求的方法 点击翻译按钮后,浏览器会发送一系列请求。找到一个 HTTP 的post请求,头是一个json,source就是我们要查询的单词。
通过 copy as curl 可以简便地构造请求。在终端里粘贴后,可以返回一大串json。
运用 culconventer.com 网站生成代码。有些 header 比较复杂,生成代码有转译导致的编译错误,需要删除。
创建 http 请求 client := &http.Client{}
设置请求头 req.Header.set("")
发起请求 resp, err := client.Do(req)
读取响应
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
为生成一段json,可以构造一个结构体(和这段jason的结构一一对应),json转 go的结构体,网站 oktools.net/json2go