从零开始Go语言Ⅰ-入门P1 | 青训营笔记

86 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第1天

前言
跟随课程进度从零开始学习Go语言,在学习过程中不断积累,通过专题形式记录Go学习全过程。

什么是Go语言

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go的语法接近C语言,语法简单、学习曲线平缓,具有丰富的标准库、完善的工具链,支持静态链接、快速编译、跨平台。

Go语言入门

开发工具

工欲善其事,必先利其器。 开发Go程序前,需要搭建开发环境,安装相应的开发工具,对于工具的选取,推荐使用VSCode和GoLand,VSCode非常强大,可以通过插件进行多种语言编译,GoLand有很多规则,但高自动化使得其非常容易上手。

基础语法

Hello World

package main

import(
    "fmt"
)

func main(){
    fmt.Println("Hello, World!")
}

以上是一个基础的Go程序,也是所有Iter在学习编程时接触到的第一个演示程序。Go 程序可以由多个标记组成,可以是关键字、标识符、常量、字符串、符号。

fmt.Println("Hello, World!")

以上Go语句由6个标记组成

fmt
.
Println
(
"Hello, World!"
)

Go语言语法与C接近,其又像Python一样简洁。在首次接触时,有一点应该需要注意,在Go语言中,左大括号并不能换行放置(这一点与我早期学习C++时的习惯有所不同,所有的大括号换行放置会让我更清楚代码分块,但后来学习Java和Python时,这一习惯便舍弃)
if判断式和for循环不需要以小括号包覆,单语句结尾也不需要添加,这些规定无疑对于专注程序本身很有效。

变量与常量

变量

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用var关键字,与众不同的是Go语言是type后置,规则方面与其他语言相似:

var identifier type

有一些需要注意的点:

  • 变量未初始化时,默认为零值,这一点与C有所不同,在C中声明变量时,如果没有赋值,可能会对结果产生一些未知影响。
  • Go语言可以根据值自动判断类型
  • 在函数体中赋值可以使用:=进行简化
  • 未被使用的赋值会报错

常量

var关键字替换为const关键字即可进行常量声明。

const identifier [type] = value

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

条件语句

Go语言提供if, else, else if, switch, select语句进行条件判断。其规则与其他语言相似,不做展开,需要注意的是:Go 没有三目运算符,所以不支持?:形式的条件判断,这一点对于习惯于简化判断的Iter来说略受影响。

循环语句

在Go语言中,只有for循环可供选择,此外,Go语言支持break, continue, goto循环控制语句。

数组、切片、范围、集合

数组

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

Go语言数组声明需要指定元素类型及元素个数,同样可以使用:=声明数组,并且数组长度不确定时,可以使用...进行代替,由编译器进行判断。

切片 (Slice)

Go语言中的切片类似于动态数组,通过声明一个未指定大小的数组创建切片:

var identifier []type

可以使用make()创建切片:

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

make([]T, length, capacity) //capacity为可选参数

同样的,切片也可以使用:=进行简化。

范围 (Range)

range用于for循环可以对slice、map、数组、字符串等进行迭代:

for key, value := range oldMap {
    newMap[key] = value
} //key和value可以省略

/* 只读取key */
for key := range oldMap
//或下列形式:
for key, _ := range oldMap

/* 只读取value */
for _, value := range oldMap

集合 (Map)

Map是一种无序的键值对的集合,可以使用内建函数make也可以使用map关键字创建Map:

var map_variable map[key_data_type]value_data_type

/* 使用make函数 */
map_variable := make(map[key_data_type]value_data_type)

如果不进行初始化,会创建一个nil map,不能用于存放键值对。
Map可以通过key检索数据,并且可以进行迭代,但由于其无序,所以返回顺序并不能被确定。

参考

  • 字节课程-Go语言原理与实践
  • 菜鸟教程-Go语言
  • Wiki-Go社区