Go语言基础知识学习 | 青训营笔记

149 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第 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