GO语言基础语法 | 青训营笔记

47 阅读3分钟

Go语言了解

Go语言特点

谷歌出产的一个编程语言,特点如下:

1.高性能、高并发(不需要第三方库可实现高并发,只需要使用标准库或者任意基于标准库的第三方库)

2.语法简单、学习曲线平缓(类似c语言,但比c简练)

3.丰富的标准库

4.完善的工具链

5.静态链接

6.快速编译

7.跨平台

8.垃圾回收(类似Java,无需考虑内存的分配与释放)

使用Go语言的公司

image.png

Go语言在云计算、微服务、大数据、区块链、物联网等业务领域也在快速发展使用

Go入门

Go开发环境的配置

开发环境-先安装Golang语言:

安装网址:go.dev/ 使用镜像安装:studygolang.com/dl GitHub访问速度太慢可配置:goproxy.cn/

开发环境-配置Go的集成开发环境(配置Golang的编辑器或者IDE):可选Visual Studio Code或者GoLand(收费)

基础语法

大括号不能单独放在一行

Go 语言中使用 fmt.Sprintf 或 fmt.Printf 格式化字符串并赋值给新串:

  • Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。
  • Printf 根据格式化参数生成格式化的字符串并写入标准输出。

变量声明:

两种变量声明形式:“var vname type”或者“:=”,指定变量类型,如果没有初始化,则变量默认为零值。

  • 数值类型(包括complex64/128)为 0
  • 布尔类型为 false
  • 字符串为  "" (空字符串)(字符串连接可通过+实现)
  • 以下几种类型为 nil:

不声明类型时,可根据值自行判定变量类型。如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误

常量

常量定义格式: const identifier [type] = value type可以省略,编译器会根据值推断类型

image.png if-else语句:if后面条件不加小括号,执行语句必须有大括号

image.png

循环:只有for循环

image.png

switch:可以使用任意的变量类型,且不需要break跳出

image.png

数组:长度固定Go 语言数组声明需要指定元素类型及元素个数,语法格式如下: var variable_name [SIZE] variable_type

image.png

切片:可变长度的数组,使用make创建切片,切片不需要说明长度

定义切片:可以声明一个未指定大小的数组来定义切片(如var numbers []int)或使用 make()  函数来创建切片( make([]T, length, capacity)其中capacity可省略不写 )

image.png

map:使用make创建map,Map是一种无序的键值对集合,可使用make或map关键字定义Map

/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType[, initialCapacity])
// 使用字面量创建 Map
m := map[string]int{
    "apple": 1,
    "banana": 2,
    "orange": 3,
}
// 遍历 Map
for k, v := range m {
    fmt.Printf("key=%s, value=%d\n", k, v)
}

// 删除键值对
delete(m, "banana")

Range:Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对

函数定义

func function_name( [parameter list] ) [return_types] {
   函数体
}

类型转换格式为:

type_name(expression)

将一个字符串转换成另一个类型,可以使用以下语法:

var str string = "10"
var num int
num, _ = strconv.Atoi(str)

接口 Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。 /* 定义接口 */

   method_name1 [return_type]  
   method_name2 [return_type]  
   method_name3 [return_type]  
   ...  
   method_namen [return_type]  
}  
  
/* 定义结构体 */  
type struct_name struct {  
   /* variables */  
}  
  
/* 实现接口方法 */  
func (struct_name_variable struct_name) method_name1() [return_type] {  
   /* 方法实现 */  
}  
...  
func (struct_name_variable struct_name) method_namen() [return_type] {  
   /* 方法实现*/  
}

错误处理:error 类型是一个接口类型