Go的基础 | 青训营笔记

92 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

一、本堂课重点内容:

简介 - 10min

入门 - 30min(开发环境、基础语法、标准库)

实战 - 60 min (猜谜游戏、命令行词典、SOCKS5代理)

二、详细知识点介绍:

1. 什么是Go语言?

Google出品

  1. 高性能(媲美C C++)、高并发(不需要寻找第三方库)
  2. 语法简单(去掉括号、只有一种for),学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译(最快的编译时间)
  7. 跨平台(Linux Windows等)
  8. 垃圾回收

2.快速上手

2.1 开发环境

下载Golang、下载代码编辑器(VsCode、GoLand) 云:使用gitpod

2.2 基础语法

hello world:

package main // 属于main包,程序的入口包,所以该文件为程序的入口文件

import( // 导入了标准库中的fmt包,往屏幕中输入输出字符串、格式化字符串
  "fmt"
)

func main(){
   fmt.PrintLn("hello world")
}

变量: 常见的变量类型:字符串、整数、浮点型、布尔型 字符串可以直接用+拼接。

变量有两种声明方式:

  1. 用var,直接指定它的类型
var age int
  1. 用变量名:=去指定
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用于获取/写入环境变量

三、引用参考