Go语言基础 | 青训营笔记

57 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第 1 篇笔记。

一、什么是Go语言

  1. 高性能、高并发
  2. 语法简单、学习曲线平滑
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收 二、基础语法

1 Hellow world 我们先来看一下go语言的里面的 helloword ,helloworld 代码大概长这样子 第一行 package main 代表这个文件属于 main 包的一部分,main 包也就是程序的入口包。 第三行导入了标准库里面的 fmt 包。这个包主要是用来往屏幕输入输出字符串、格式化字符串。 import 下面是 main 函数,main 函数的话里面调用了 fmt.Println 输出 helloword 要运行这个程序的话,我们就直接 go run helloword.go。如果我们想编译成二进制的话,可以在 go build 来编译。编译完成之后直接 ./helloword 就可以运行。 在 fmt 包里面还有很多的函数来做不同的输入输出格式化工作。

package main

import (
   "fmt"
)

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

2 变量 go语言是一门强类型语言,每一个变量都有它自己的变量类型。 常见的变量类型包括 字符串 整数 浮点型、布尔型等。 go 语言的字符串是内置类型,可以直接通过加号拼接,也能够直接用等于号去比较两个字符串。 在go语言里面,大部分运算符的使用和优先级都和 C 或者 C++ 类似。 在go语言里面变量的声明有两种方式,一种是通过 var name string = "" 这种方式来声明变量,声明变量的时候,一般会自动去推导变量的类型。如果有需要,你也可以显示写出变量类型。另一种声明变量的方式是: 使用变量 冒号 := 等于值。 下面来讲说常量。常量的话就是把 var 改成const,值在一提的是go语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型。

3 if else go语言 里面的 if else 写法和 C 或者 C++ 类似。不同点1是 if 后面没有括号。如果写括号的话,那么在保存的时候编辑器会自动去掉。第二个不同点是 Golang 里面的if ,它必须后面接大括号,就是你不能像 C 或者 C++ 一样,直接把 if 里面的语句同一行。 4 循环

在go里面没有 while 循环、do while 循环,只有唯一的一种 for 循环。最简单的 for 循环就是在 for 后面什么都不写,代表一个死循环。循环途中你可以用 break 跳出,也可以使用经典的 C 循环,就是 for I 等于0, I 小于 NI 加加。这中间三段,任何一段都可以省略。 在循环里面,你可以用 break 或者 continue 来跳出或者继续循环。

5 switch 下面是关于 switch 分支结构,go语言里面的 switch 分支结构。看起来也 C 或者 C++ 比较类似。同样的在 switch 后面的那个变量名,并不是要括号。 这里有个很大的一点不同的是,在c++里面, switch case 如果不不显示加 break 的话会然后会继续往下跑完所有的 case, 在go语言里面的话是不需要加 break 的。 相比 C 或者 C++ , go语言里面的 switch 功能更强大。可以使用任意的变量类型,甚至可以用来取代任意的 if else 语句。你可以在 switch 后面不加任何的变量,然后在 case 里面写条件分支。这样代码相比你用多个 if else 代码逻辑会更为清晰。

6 数组 数组就是一个具有编号且长度固定的元素序列。 对于一个数组,可以很方便地取特定索引的值或者往特定索引取存储值,然后也能够直接去打印一个数组。不过,在真实业务代码里面,我们很少直接使用数组,因为它长度是固定的,我们用的更多的是切片。

7 切片 切片不同于数组可以任意更改长度,然后也有更多丰富的操作。比如说我们可以用 make 来创建一个切片,可以像数组一样去取值,使用 append 来追加元素。 注意 append 的用法的话,必须把 append 的结果赋值为原数组。 因为 slice 的原理实际上是它有一个它存储了一个长度和一个容量,加一个指向一个数组的指针,在你执行 append 操作的时候,如果容量不够的话,会扩容并且返回新的 slice。 slice 此初始化的时候也可以指定长度。 slice 拥有像 python 一样的切片操作,比如这个代表取出第二个到第五个位置的元素,不包括第五个元素。不过不同于python,这里不支持负数索引。

8 map 在其他编程语言中,可能被称为哈希表或者字典,map是实际使用过程中最频繁用到的数据结构。 我们可用make来创建一个空map,需要两个类型,第一个是key的类型,第二个value的类型。我们可以从中存储或者读取键值对,也可以用delete删除键值对。 golang的map是完全无序的,便利的时候不会按照字母顺序,也不会按照插入顺序,而是随机顺序。

9 range 下面来介绍range。对于一个 slice 或者一个 map 的话,我们可以用 range 来快速遍历,这样代码能够更加简洁。 range 遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值。如果我们不需要索引的话,我们可以用下划线来忽略。

10 函数 Golang 和其他很多语言不一样的是,变量类型是后置的。 Golang 里面的函数原生支持返回多个值。在实际的业务逻辑代码里面几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个值是一个错误信息。

后续内容会继续更新。