Golang 学习(持续更新)

记录一些golang有关的知识点,主要是一些golang特有的

目录

定义变量,常量

变量

1.声明变量

var 变量名称 类型 

命名规则
不能以数字开头
区分大小写
驼峰规则
变量声明后没有初始化的话 值为空
2.初始化变量

第一种初始化变量

var username string
username="zz" 

第二种

var username string = "zz"

第三种

var username ="zz"

3.一次声明多个变量

var 变量名称 变量名称 类型
var (
   变量名称 类型
   变量名称 类型    
)

4.短变量声明
只能局部变量 不能全局变量声明
类型不一致没关系

username := "zz"
a,b := 20, 30

5.匿名变量
不占空间 不存在重复声明

常量

const pi=3.14159
const iota(计数器)
const a=iota  //a=0
const{
b=iota
c
d//-(跳过一个值)
e
}

0,1,2,3/0,1,3

***声明中插队***
const{
b=iota//0
c=100//100
d=iota//2
e//3
}

***多个定义在一行***
const{
a,b=iota+1,iota+2 //1,2
c,d  //2,3
e,f  //3,4
}

示例
在这里插入图片描述

print/printf/println

print 不换行 不空格
println 换行 空格
printf 格式化输出 ("%v",a)

var a int =10
fmt.println("a=",a)
fmt.printf("a=%v\n",a)
fmt.printf("a=%v"  a的类型是%T",a,a)

数据类型

整型

整型分为 有符号整型 无符号整型
与其他语言一致

浮点型

有float32/64
默认使用float64 保留6位
会出现精度缺失的现象
科学计数法

var f2=3.14e2 //3.14*10^2

字符串

多行字符串
示例
在这里插入图片描述
在这里插入图片描述
主要操作
len 求长度
fmt.Sprintf 拼接字符串/+

fmt.Sprintf("%v %v",str1,str2)

strings.Split 分割 strings 需要引入strings包
strings.Split(str1,"-") 切片
strings.Join(str1,"-") 把切片连接成字符串
strings.contains 判断是否包含
strings.HasPrefix /HasSuffx 前后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置 前/后

示例
在这里插入图片描述

布尔型

布尔型
整型不能转换为布尔类型
布尔类型无法参与数值运算

var s="sssss"
if s {
       fmt.printf("true"}//报错

示例
在这里插入图片描述

类型转换

流程控制

if,for

for range, swirch case

数组

切片

声明及初始化

是引用类型 包括地址、长度、容量;默认值为nil

声明
var arr1 []int //不推荐
初始化
var arr2 = []int{1,2,3,4}
var arr3 = []int{1: 2,2: 4,3: 6}//前一个表示位置,后一个表示值

示例
在这里插入图片描述
在这里插入图片描述

切片的循环遍历

在这里插入图片描述
在这里插入图片描述

基于数组的切片

a :=[数组个数]int{}
b :=a[:] //获取数组里面所有的值

示例
在这里插入图片描述
在这里插入图片描述

基于切片的切片

a :=[]string{}
b :=a[1:] 

示例

在这里插入图片描述
在这里插入图片描述

切片的长度和容量

切片的长度是就是它包含的元素个数
切片的容量就是从它的第一个元素开始数,到其底层数组元素末尾的个数
分别可以用len(),cap()获取

示例
在这里插入图片描述
在这里插入图片描述

make函数创建一个切片

var 切片名 = make([]类型,长度,容量)

示例
在这里插入图片描述
在这里插入图片描述

append扩容

扩容

append (切片名,扩容量)

在这里插入图片描述
在这里插入图片描述

合并

切片名 = append(切片名,切片名1...)//必须要有...

示例
在这里插入图片描述
在这里插入图片描述

切片扩容的策略

在这里插入图片描述
在这里插入图片描述

copy函数复制一个切片

copy(切片名1,切片名2) //切片名2复制到1中

示例
在这里插入图片描述
在这里插入图片描述

删除切片元素

golang中没有删除切片元素的专用方法,可以通过再切片和合并的方法实现

示例
在这里插入图片描述
在这里插入图片描述

切片的排序

选择排序

在这里插入图片描述
在这里插入图片描述

冒泡排序

在这里插入图片描述
在这里插入图片描述

sort包排序

1.对于int,float64和string数组或是切片的排序,
有sort.Ints(),sort.Float64s()和sort.strings()函数
默认从小到大排序

示例
在这里插入图片描述

map

map是一种无序的基于key-value的数据结构,map是引用数据类型,必须初始化

map[KeyType]ValueType //KeyType表示键的类型,ValueType表示键对应的值的leixing

初始化

map类型的变量默认初始值为nil,需要使用make()函数来分配内存

var map类名 = make(mapKeyType]ValueType)

示例
在这里插入图片描述
在这里插入图片描述
声明时填充元素
在这里插入图片描述
在这里插入图片描述

修改map类型

在这里插入图片描述
在这里插入图片描述

在map中存放一系列属性,把map类型值定义为切片

在这里插入图片描述
在这里插入图片描述

元素为map类型的切片

在这里插入图片描述
在这里插入图片描述

for range循环遍历map类型

在这里插入图片描述
在这里插入图片描述

以关键字key循环遍历map类型

在这里插入图片描述
在这里插入图片描述

指针,make,new

函数

函数定义

func 函数名(参数 (变量名,类型))(返回值){} 类型一样可省略前面的

函数变量

可变参数

在这里插入图片描述
在这里插入图片描述

函数返回值

return关键字一次返回多值

在这里插入图片描述
在这里插入图片描述

返回值命名,并在函数体中直接使用

在这里插入图片描述
在这里插入图片描述

函数作为另一个函数参数

这里用到的是type定义一个函数类型

type 函数类型名(int,int)int

在这里插入图片描述
在这里插入图片描述

函数作为另一个函数返回值

在这里插入图片描述
在这里插入图片描述

匿名函数

func (参数)(返回值){
    函数体
}

在这里插入图片描述
在这里插入图片描述

函数递归

在这里插入图片描述
在这里插入图片描述

闭包

1.闭包是指有权访问另一个函数作用域中的变量的函数
2.创建闭包的常见的方式是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量

写法: 函数里嵌套函数,最后返回里面的函数

func adder()

作用就是定义一个变量既常驻内存又不污染全局
在这里插入图片描述
在这里插入图片描述

defer,panic/recover

defer

defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序执行。

在这里插入图片描述
在这里插入图片描述

panic/recover

go语言中目前没有异常机制,使用panic和recover模式处理错误
注意panic在任何地方都可生效,但recover只能在defer中有效

抛出异常,停止执行
在这里插入图片描述
在这里插入图片描述
抛出异常,继续执行
在这里插入图片描述
在这里插入图片描述

结构体

结构体定义

type 类型名 struct{
   字段名 字段类型
   字段名 字段类型
   ...
}

在这里插入图片描述

结构体实例化

第一种方法

在这里插入图片描述
在这里插入图片描述

第二种方法(new关键字)

在这里插入图片描述
在这里插入图片描述

第三种方法(&)

在这里插入图片描述
在这里插入图片描述

第四种方法(键值对初始化)

在这里插入图片描述
在这里插入图片描述

第五种方法

在这里插入图片描述
在这里插入图片描述

第六种方法(有些不赋值)

在这里插入图片描述
在这里插入图片描述

第七种方法(使用值的列表初始化)

在这里插入图片描述
在这里插入图片描述

结构体方法

结构体是值类型

func(接受者变量 接受者类型)方法名(参数列表)(返回参数){
函数体
}
//接受者变量 命名时第一个字母小写

在这里插入图片描述
在这里插入图片描述
修改结构体属性
在这里插入图片描述
在这里插入图片描述

结构体匿名字段

可以不写字段名
在这里插入图片描述
在这里插入图片描述

嵌套结构体

在这里插入图片描述
在这里插入图片描述

嵌套匿名结构体

在这里插入图片描述
在这里插入图片描述

结构体继承

在这里插入图片描述
在这里插入图片描述

接口

接口定义

type 接口名 interface{
方法名1(参数列表1)返回值列表1
方法名2(参数列表2)返回值列表2
}

在这里插入图片描述
在这里插入图片描述

空接口

定义

不定义任何方法的接口,可以接受任何类型的接口
在这里插入图片描述
在这里插入图片描述
空接口也可以直接当做类型使用
在这里插入图片描述
在这里插入图片描述

空接口作为函数的参数

在这里插入图片描述
在这里插入图片描述

map的值实现空接口

在这里插入图片描述
在这里插入图片描述

类型断言

判断空接口中的类型

x.(T)

在这里插入图片描述
在这里插入图片描述

结构体值接受者和指针接受者实现接口的区别

值接收者

如果结构体中的方法是值接受者,那么实例化后的结构体值类型和结构体指针类型都可以赋值给接口变量
在这里插入图片描述
在这里插入图片描述

指针接收者

如果结构体中的方法是指针接受者,那么实例化后的结构体指针类型可以赋值给接口变量,结构体值类型不能赋值给接口变量
在这里插入图片描述
在这里插入图片描述

结构体实现多接口

在这里插入图片描述
在这里插入图片描述

接口嵌套

在这里插入图片描述
在这里插入图片描述

goroutine channel 并发和并行

主要通过多协程实现

并行

协程
go 来实现
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46595591/article/details/107186427