教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang 学习(持续更新)

Golang 学习(持续更新)

发布时间:2021-04-09   编辑:jiaochengji.com
教程集为您提供Golang 学习(持续更新)等资源,欢迎您收藏本站,我们将为您提供最新的Golang 学习(持续更新)资源

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

目录

  • 定义变量,常量
    • 变量
    • 常量
  • print/printf/println
  • 数据类型
    • 整型
    • 浮点型
    • 字符串
    • 布尔型
    • 类型转换
  • 流程控制
    • if,for
    • for range, swirch case
  • 数组
  • 切片
    • 声明及初始化
    • 切片的循环遍历
    • 基于数组的切片
    • 基于切片的切片
    • 切片的长度和容量
    • make函数创建一个切片
    • append扩容
      • 扩容
      • 合并
      • 切片扩容的策略
    • copy函数复制一个切片
    • 删除切片元素
    • 切片的排序
      • 选择排序
      • 冒泡排序
      • sort包排序
  • map
    • 初始化
    • 修改map类型
    • 在map中存放一系列属性,把map类型值定义为切片
    • 元素为map类型的切片
    • for range循环遍历map类型
    • 以关键字key循环遍历map类型
  • 指针,make,new
  • 函数
    • 函数定义
    • 函数变量
      • 可变参数
    • 函数返回值
      • return关键字一次返回多值
      • 返回值命名,并在函数体中直接使用
    • 函数作为另一个函数参数
    • 函数作为另一个函数返回值
    • 匿名函数
    • 函数递归
    • 闭包
    • defer,panic/recover
      • defer
      • panic/recover
  • 结构体
    • 结构体定义
    • 结构体实例化
      • 第一种方法
      • 第二种方法(new关键字)
      • 第三种方法(&)
      • 第四种方法(键值对初始化)
      • 第五种方法
      • 第六种方法(有些不赋值)
      • 第七种方法(使用值的列表初始化)
    • 结构体方法
    • 结构体匿名字段
    • 嵌套结构体
    • 嵌套匿名结构体
    • 结构体继承
  • 接口
    • 接口定义
    • 空接口
      • 定义
      • 空接口作为函数的参数
    • map的值实现空接口
    • 类型断言
    • 结构体值接受者和指针接受者实现接口的区别
      • 值接收者
      • 指针接收者
    • 结构体实现多接口
    • 接口嵌套
  • goroutine channel 并发和并行
    • 并行

定义变量,常量

变量

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 来实现

到此这篇关于“Golang 学习(持续更新)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
制定Golang的Emacs配置
golang SDK环境搭建
学习golang开始前的准备工作
golang 扩展package 列表
Go: 学习笔记1 让编程更有乐趣
go语言学习之路(七)——HTTP的GET和POST格式解析
【GoLang】GoLang 微服务、开源库等参考资料
想系统学习GO语言(Golang
go语言学习笔记(第3章)—面向对象编程
golang学习之map排序方法

[关闭]
~ ~