这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容:
简介 - 10min
入门 - 30min(开发环境、基础语法、标准库)
实战 - 60 min (猜谜游戏、命令行词典、SOCKS5代理)
二、详细知识点介绍:
1. 什么是Go语言?
Google出品
- 高性能(媲美C C++)、高并发(不需要寻找第三方库)
- 语法简单(去掉括号、只有一种for),学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译(最快的编译时间)
- 跨平台(Linux Windows等)
- 垃圾回收
2.快速上手
2.1 开发环境
下载Golang、下载代码编辑器(VsCode、GoLand) 云:使用gitpod
2.2 基础语法
hello world:
package main // 属于main包,程序的入口包,所以该文件为程序的入口文件
import( // 导入了标准库中的fmt包,往屏幕中输入输出字符串、格式化字符串
"fmt"
)
func main(){
fmt.PrintLn("hello world")
}
变量: 常见的变量类型:字符串、整数、浮点型、布尔型 字符串可以直接用+拼接。
变量有两种声明方式:
- 用var,直接指定它的类型
var age int
- 用变量名:=去指定
age := 22
常量:const,可以根据使用的上下文自动确定类型。
2.3 基础语法- if else
if后面没有括号,且必须写大括号,不能省略。
2.4 基础语法-循环
for j := 7; j < 9; j++{} 任何一段都可以省略,可以用continue和break继续循环或跳出循环。
2.5 基础语法-switch
不用加break,不会一直跑完所有分支。 可以在switch里不加条件变量,可以在每个case里写条件分支。
2.6 基础语法-数组
长度固定,如var a [5]int
2.7 基础语法-切片
可变长度数组。如s := make([]string, 3),g:=[]int{1,2}可以用append追加元素。
2.8 基础语法-map
一种内置数据结构,用于存储键值对。键必须是可比较的数据类型(如字符串、整数等),值可以是任何数据类型。
m := make(map[string]int)
m["one"] = 1
r, ok := m["unknow"]
delete(m, "one")
2.9 基础语法-range
快速遍历,用于遍历数组、切片、字符串、map 、channel中的元素。 会返回两个值,一个是索引,一个是对应位置的值。
2.10 基础语法-函数
变量类型后置。
2.11 基础语法-指针
对常用参数进行修改。
func add(n *int){
*n += 2
}
add(&n) // 加&才能编译通过
2.12 基础语法-结构体
是带类型的字段的集合。
type user struct{
name string
password string
}
没初始化的字段就为空。
2.13 基础语法-结构体方法
定义结构体需要使用关键字 type 和 struct。每个字段都有一个名称和类型。
2.14 基础语法-错误处理
go会用一个返回值去返回错误信息,可以知道具体是哪个方法产生了错误。 需要用多个变量去接收函数的返回值,其中有一个是err,需要对err是否存在进行判断,只有err不存在的时候才能去取值,否则会出现错误。
2.15 基础语法-字符串操作
strings.Index等
2.16 基础语法-字符串格式化
fmt.Println 打印多个变量并换行 可以用%v打印值,也可以用%+v打印更详细的值,用%#v进一步详细。
2.17 基础语法-JSON操作
只需要保证结构体每个字段首字母大写,就可以用json.Marshal(a)去序列化。序列化的值可以用json.Unmarshal()去反序列化到空变量里。
如果需要小写下划线风格,可以在字段后面加一个json:"age"
2.18 基础语法-时间处理
最常用的:time.Now(),time.Unix()获取时间戳
2.19 基础语法-数字解析
在strconv包下。 可以用ParseInt解析字符串,当然也可用strconv.Atoi转为字符串。
2.20 基础语法-进程信息
os.Args获取命令行参数 os.Getenv/Setenv用于获取/写入环境变量
三、引用参考
- 字节内部课:Go 语言上手 - 基础语法
- Go 语言教程 | 菜鸟教程