GO语言基础(一)|青训营笔记

62 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容:

  • 开发环境配置
  • 基础语法(上)

二、详细知识点介绍:

  • 开发环境配置
  1. 安装Golang
    可以在Golang官网下载Golang,若无法访问可以尝试访问Golang中国镜像下载。
    若访问GitHub困难,可以访问goproxy.cn 按照网站内提示进行配置。

image.png
其中PowerShell方式因未知原因无法生效,第二种方式可以正常生效。
2. 配置集成开发环境
(1)使用VS Code
微软官方教程
(2)使用GoLand

  • 基础语法(上)
  1. hello world
package main

import (
	"fmt"
)

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

其中package main代表这个文件是main包的一部分;
import "fmt"代表导入标准库中的fmt包,用于向屏幕输入输出字符串,注意在导入多个包时的括号为圆括号()而非C++常用的{}
func main(){}为main函数,其中调用了fmt.Println()输出hello world。

在终端中使用go run main.go运行程序,使用go build main.go将程序编译为可执行文件。
编译完成后使用./main.go即可运行。

  1. 变量和常量
    变量声明使用var关键字或:=关键字。
var identifier type
var identifier = value
var identifier type = value
var identifier1,identifier2 type = value1 , value2
identifier := value

intVal := 1相等于

var intVal int 
intVal =1

常见的type有:boolintstringfloat32float64等。
字符串之间可直接使用+进行拼接。
常量声明将var改为const即可。

  1. if else语句
if 布尔表达式{
    /*需要执行的语句*/
}

if 布尔表达式{
    /*需要执行的语句*/
} else {
    /*需要执行的语句*/
}

if 布尔表达式{
    /*需要执行的语句*/
} else if 布尔表达式{
    /*需要执行的语句*/
} else {
    /*需要执行的语句*/
}

注意布尔表达式左右没有(),ifelse中的语句必须在{}中。

  1. 循环语句
    只能使用for关键词。
    和C语言的for一样:
for init; condition; post { }

和C语言的while一样:

for condition { }

和C语言的for(;;)一样:

for { }

init: 一般为赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post: 一般为赋值表达式,给控制变量增量或减量。

for语句执行过程如下:
1、先对表达式 1 赋初值;
2、判别赋值表达式init是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行post,进入第二次循环,再判别condition;否则判断condition的值为假,不满足条件,就终止for循环,执行循环体外语句。
5. switch语句

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

switch默认情况下case最后自带break语句,匹配成功后就不会执行其他case,如果我们需要执行后面的case,可以使用fallthrough
6. 数组
数组声明:

var variable_name [SIZE] variable_type
var a[10] float32

数组初始化:

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

在声明数组的同时快速初始化数组:

balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

若数组长度不确定,可用...代替数组的长度,编译器会根据元素个数自行推断数组的长度:

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

如果设置了数组的长度,我们还可以通过指定下标来初始化元素:

//  将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}

初始化数组中{}中的元素个数不能大于[]中的数字。
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
7. 切片
Go语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
声明一个未指定大小的数组来定义切片:

var identifier []type

使用make()函数来创建切片:

var slice1 []type = make([]type, len)

slice1 := make([]type, len)

也可以指定容量,其中capacity为可选参数。

make([]T, length, capacity)

这里len是数组的长度并且也是切片的初始长度。
可以使用append()函数向切片中添加元素。

s=append(s,"d")
s=append(s,"e","f")

注意添加元素后需赋值回原切片。
可以使用copy()拷贝切片数据。

copy(c,s)

切片截取:

numbers := []int{0,1,2,3,4,5,6,7,8}
numbers//原始切片
numbers[1:4]//从索引1(包含)到索引4(不包含)
numbers[:3]//索引3(不包含)之前的所有元素 **默认下限为0**
numbers[4:]//索引4(包含)之后的所有元素 **默认上限为len(s)**

一个切片在未初始化之前为空切片(nil),长度为0。
len()方法可以获取切片的长度;
cap()方法可以测量切片最长可以达到多少。

三、引用参考: