GO语言学习总结 | 青训营笔记

31 阅读3分钟

该文章,是针对12(Go语言基础语法),13日(Go语言工程实践)学习内容进行的阶段性总结,通过问题进行自测,以及加强对相关概念的理解

首先,关于Go语言的最基本的知识?

  1. Go语言的结构是什么样?
  2. Golang是强类型语言吗?他有哪些常用的数据类型?
  3. Golang中if-else语句的用法?与C/C++有什么不同?
  4. Go语言如何实现循环?怎么写死循环?
  5. Go语言的switch语句怎么用,它有什么特点?是否需要“break”?
  6. Golang如何创建一个数组?如何获取数组长度?
  7. Golang中make如何使用?如何追加元素?
  8. map的使用?以下代码的输出?
m:=make(map[string]int)
m["one"]=1
r, ok=m["unknow"]
fmt.Prinln(r,ok)

9.range在for不同数目参数的情况下如何发挥作用?例如

m:=map[string]string{"a":"A","b":"B"}
for k,v := range m{
    fmt.Println(k,v)
}

10.golang中指针的用法?“*”?"&"?

11.如何创建一个结构体?怎么进行赋值?支持单个属性赋值吗?

12.如何定义一个结构体方法?

13.错误处理/errors模块怎么用?nil表示什么?

14.分别联想以下各语句的返回结果?

a:="hello"
string.Contains(a,"ll")
string.Count(a,"l")
string.HasPrefix(a,"he")
string.HasSuffix(a,"llo")
string.index(a,"ll")
string.Join([]string{"he","llo"},"-")
string.Repeat(a,2)
string.Replace(a,"e","E",-1)
string.Split("a-b-c","-")

15."%v""%+v""%*v"分别是用来干什么的

16.如何进行json的序列化和反序列化?

17.如何将字符串转换为数字?解释ParseInt和Atoi的区别

接下来,梳理一下从三个案例中我们学到了什么?

猜数字游戏:

在生成随机数时需要用到以下方法初始化随机种子:

rand.Seed(time.Now().UnixNano())

这么做的理由是在 Golang 中,rand 是一个伪随机数生成器。这意味着,每次程序运行时,rand 生成的随机数序列是相同的。如果你不使用 rand.Seed() 来设置随机数种子,那么你每次运行程序得到的随机数序列都是相同的。

为了让每次程序运行时得到的随机数序列都不同,我们可以使用 rand.Seed() 方法来设置随机数种子。Seed() 方法接受一个 int64 类型的参数,这个参数表示随机数种子。通过给 Seed() 提供一个不同的随机数种子,我们就可以获得一个不同的随机数序列。

在上面的示例代码中,我们使用 time.Now().UnixNano() 来获取当前时间的纳秒数,并将其作为参数传递给 rand.Seed()。这样做的效果是,每次程序运行时,都会使用不同的随机数种子,从而得到不同的随机数序列。

读取用户输入

reader := bufio.NewReader(os.Stdin)
//更简便的方法可以使用fmt.Scanf

在线翻译词典:

提到两个网站

CurlConverter将Curl转成能发起请求的go语言

JSON转Go 将json转成golang的结构体形式

以及json.Marshal和json.UnMarshal的具体用法

Socks5代理

Socks5的工作原理

三个阶段各如何实现

请求报文的格式

如何存取收到的报文

关于语言进阶

1.并发与并行?

2.线程与协程?

3.什么是通道?分为哪两种类型?如何实现?

4.defer的作用是什么?

5.共享内存如何保证安全?lock怎么使用?

6.WaitGroup是什么?它暴露出哪些方法?具体怎么使用?