Go语言基础 | 青训营笔记

85 阅读3分钟

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关键字,结束后关闭。

引用

www.runoob.com/go/go-tutor… juejin.cn/course/byte…