Go语言基础 | 青训营笔记
这是我参与「第五届青训营」伴学笔记创作活动的第1天
简介
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
简单http协议例子
package main
import "net/http"
func main(){
http.Handle("/",http.FileServer(http.Dir(".")))
http.ListenAndServe(":8080",nil)
}
Go基础语法
变量类型
Go常见的字符类型有布尔型、数字类型、字符串类型、派生类型
两种变量声明 var 变量或者变量:=值
if-else
if之后没有括号
循环
Go中只有for循环,没有while和do while
分支结构
switch case和C++不同,不加break也不会执行后续分支。
也可以使用任意的表达式等。
数组
定义:var a [5] int
切片
可变长度的数组,可以使用make创建,类似于数组的使用。可以使用append添加元素。
函数
函数是基本的代码块,用于执行一个任务。
Go 语言最少有个 main() 函数。
你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。
函数声明告诉了编译器函数的名称,返回类型,和参数。
func function_name( [parameter list] ) [return_types] {
函数体
}
函数定义解析:
- func:函数由 func 开始声明
- function_name:函数名称,参数列表和返回值类型构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。
指针
Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
结构体
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
type struct_variable_type struct {
member definition
member definition
...
member definition
}
Map
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
实战
猜数字
随机数需要设置随机数种子,通过rand.Seed()函数设置。
通过bufio.NewReader()函数实现快速读取。
有的函数会返回一个error类型的变量用来判断是否出错。
在线辞典
通过设置req配置请求,然后通过client.Do(req)获取resp,可以通过Unmarshal函数将流jsao序列化。
socks5代理服务器
和代理服务器建立连接,代理服务器和真正服务器建立连接。
Listen增添监听端口,Accept接受请求,go关键字建立协程。
process处理请求,defer关键字,结束后关闭。