这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
1. 数据类型
1.1 布尔型
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
1.2 数字类型
整型 int、uint ,浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
1.3字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
1.4派生类型
包括: (a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct) (d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型
2.变量与常量
2.1变量
①全局变量使用var关键字来声明
//使用var来声明一个变量
var name type
//使用var来声明多个变量
var (
name1 type1
name2 type2
...
)
②局部变量(在函数体内声明)使用 := 的结构来声明
name := xxx(某个类型的值)
2.2常量
指声明之后就不能改变的数据,使用const关键字来声明
//一次声明一个常量的格式:
const name [type] = xxx
//一次声明多个常量的格式:
const (
name1 [type1] = xxx
name2 [type2] = xxx
...
)
3.运算符
与其他多种高级语言类似包括:
1)算术运算符
2)关系运算符
3)逻辑运算符
4)位运算符
5)赋值运算符
6)其他运算符
注意:go语言中没有乘方运算符,也没有三目运算符
4.函数
go语言函数定义格式如下:
func function_name( [parameter list] ) [return_types] {
函数体
}
函数定义解析:
- func:函数由 func 开始声明
- function_name:函数名称,参数列表和返回值类型构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。
5.指针
1.定义:
一个指针变量指向了一个值的内存地址。
使用 "*" 一个星号来获取指针所指向的内容
使用 & 来获取相应变量的内存地址
//指针声明格式
var var_name *var-type
2.指针使用流程:
- 定义指针变量。
- 为指针变量赋值。
- 访问指针变量中指向地址的值。
package main
import "fmt"
func main() {
var a int= 20 /* 声明实际变量 */
var ip *int /* 声明指针变量 */
ip = &a /* 指针变量的存储地址 */
fmt.Printf("a 变量的地址是: %x\n", &a )
/* 指针变量的存储地址 */
fmt.Printf("ip 变量储存的指针地址: %x\n", ip )
/* 使用指针访问值 */
fmt.Printf("*ip 变量的值: %d\n", *ip )
}
6.结构体
1.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
//定义结构体必须使用 type和struct关键字
type struct_variable_type struct {
member definition
member definition
...
member definition
}
//例如:
type Books struct {
title string
author string
subject string
book_id int
}
2.结构体也可以作为函数参数传递给函数
3.结构体指针
结构体是值传递类型,因此想要修改具体的结构体实例就需要使用到指针
//创建一个名为books的结构体
type Books struct {
title string
author string
subject string
book_id int
}
//创建一个books类型的指针
var bk *Books
//使用结构体指针来访问结构体成员,使用"."操作符,例如:
bk.title
7.Slice(切片)
1.Go 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
//声明方式
var name []type
2.切片必须使用make()函数初始化后才可以使用
//初始化格式:
var slice1 []type = make([]type, len)
//也可以简写为
slice1 := make([]type, len)
3.len()和cap()函数
切片是可索引的,并且可以由 len() 方法获取长度。
切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。
var s = make([]int,5,10)
fmt.Printf("该切片的长度为:%d,容量为:%d",len(s),cap(s))
8.range(范围)
Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
//for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
for key, value := range oldMap {
newMap[key] = value
}
9.map(集合)
1.Map 是一种无序的键值对的集合,因此我们可以对其进行迭代,但因其无序,所以其返回顺序无法确定。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
//声明格式
var m map[KeyType]ValueType
/*
slice、map、chan三种类型都必须使用make函数初始化后才能使用
*/
m = make(map[KeyType]ValueType,capacity)
2.delete()函数
可以删除map中指定的键值对,格式如下:
delete(mapName,KeyName)