学习Go的知识总结

Go语言

1.配置环境变量

GOPATH 加路径

GOROOT 加路径

修改环境变量

Setx GOPATH 加要修改的路径

Setx GOROOT 加要修改的路径

两个重要的配置修改

$env:GO111MODULE=”on”

$env:GOPROXY=”http://goproxy.cn"

2.Go相关命令

build: 编译包和依赖

clean: 移除对象文件

doc: 显示包或者符号的文档

env: 打印go的环境信息

bug: 启动错误报告

fix: 运行gofmt进行格式化

generate: 从processing source生成go文件

get: 下载并安装包和依赖

install: 编译并安装包和依赖

list: 列出包

run: 编译并运行go程序

test:运行测试

tool: 运行go提供的工具

version: 显示go的版本

vet: 运行go tool vet

常用快捷键

CTRL+ / 行注释

shift+alt+a 块注释

ctrl + a 全选

ctrl+ c 复制

ctrl+v 粘贴

ctrl+shift+k 删除行

ctrl+e 查找文件

ctrl+shift+p 打开设置命令行

快速生成代码片段

pkgm main包+main主函数

ff fmt.Printf(“”, var)

for for i := 0; 1 < count; i++{}

Go 常见的格式化指令表示

格式化指令 含义
%% %字面量
%b 一个二进制整数,将一个整数格式转化为二进制的表达方式
%c 一个Unicode的字符
%d 十进制整数
%o 八进制整数
%x 小写的十六进制数值
%X 大写的十六进制数值
%U 一个Unicode表示法表示的整型码值
%s 输出以原生的UTF8字节表示的字符,如果console不支持utf8编码,则会乱码
%t 以true或者false的方式输出布尔值
%v 使用默认格式输出值,或者如果方法存在,则使用类性值的String()方法输出自定义值
%T 输出值的类型

golang变量

变量是计算机语言中能储存计算结果或表示值的概念

声明变量必须使用

声明变量的语法

1
var identifier type

var:声明变量关键字

identifier: 变量名称

type: 变量类型

变量的初始化

var 变量名 类型 = 表达式

var name string = “张三”

初始化多个变量

var name, age,gender = “张三” ,20 , “男”

短变量声明 :=

在函数内部,可以使用 := 运算符对变量进行声明和初始化

golang常量

定义一个常量使用const关键字,语法格式如下

1
const constantName [type] = value

const: 定义常量的关键字

constantName: 常量名称

type: 常量类型

value: 常量的值

常量 iota

一个可编译器修改的常量,它的默认开始值是0,每调用一次加1

遇到const关键字设为0

golang语言数据类型

go数据类型用于声明函数和变量

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存

1.布尔型 值通常是false和true 例如 var b bool = true

2.数字类型 整型int 和浮点型 float32 、float64 ,并且支持复数,其中位的运算采用补码

3.字符串类型 字符串就是一串固定长度的字符连接起来的字符序列,go的字符串是由单个字节连接起来的 ,字节使用UTF-8编码标识Unicode文本

4.派生类型

a,指针类型(Pointer)

b,数组类型

c,结构化类型(struct)

d,Channel类型

e,函数类型

f,切片类型

g,接口类型(interface)

h,Map类型

golang标识符

标识符的英文是identifer, 通俗来讲就是给变量、常量、函数、方法、结构体、数组、切片、接口起名字。

标识符的组成

  1. 标识符由数字、字母、和下划线(…)组成
  2. 只能以字母和下划线开头
  3. 标识符区分大小写

golang语言关键字

break default func interface select

case defer go map struct[结构]

chan[通道] else goto[转到] package switch

const[常量] fallthrough[落空、失败] if range[范围] type

continue for import return var

预定义标识符

分为基本类型的名称和基本的内置函数

append[添加] bool byte cap close complex[复杂] complex64 complex128 uint16

copy false float32 float64 imag int int8 int16 uint32

int32 int64 iota[极微小] len make new nil[零] panic[恐慌] uint64

print println real recover[恢复] string true uint uint8 uintptr[方法、指针]

go数字类型

整形:

int8(-128->127)

int16(-32768->32767)

int32(-2,147,483,648->2,147,483,647)

golang字符串

一个Go语言字符串是一个任意 字节的常量序列

go语言字符串字面量

字符串字面量使用双引号 “”或者反引号 ‘ 来创建。双引号用来创建可解析的字符串,支持转义,但不能用来引用多行,反引号用来创建原生的字符串字面量,可能由多行组成,但不支持转义,并且可以包含除了反引号外其他所有字符。双引号创建可解析的字符串应用最广泛,反引号用来创建原生的字符串则多用于书写多行消息,HTML以及正则表达式。

go语言字符转义字符

\r 回车符
\n 换行符
\t 制表符
' 单引号
" 双引号
\ 反斜杠

golang运算符

1.算术运算符

2.关系运算符

3.逻辑运算符

4.位运算符

5.赋值运算符

注意:++(自增) –(自减)在go是单独语句,并不是运算符

golang语言中语法

if else if else语句

if 布尔表达式1 {

} else if 布尔表达式2 {

}else{

}

switch语句

switch var1{

case val1

case val2

default:

}

for语句

for 初始语句; 条件表达式; 结束语句{

​ 循环语句体

}

for range循环

Go语言中可以使用for range遍历数组、切片、字符串、map及通道(channel),通过for range遍历的返回值有以下规律:

1、数组、切片、字符串返回索引和值

2、map返回键和值

3、通道(channel)只返回通道内的值

golang数组

数组是相同数据类型的一组数据的集合,数组一旦定义长度不能修改,数组可以通过下标(或者叫索引)访问元素。

golang语言数组的定义

定义如下:

1
var variable_name [SIZE] variable_type

variable_name: 数组名称

SIZE: 数组长度,必须是常量

variable_type: 数组保存元素的类型

golang切片

前面我们学习了数组,数组是固定长度,可以容纳相同数据类型的元素的集合。当长度固定时,使用还是带来一些限制,比如:我们申请的长度太大浪费内存,太小又不够用。

鉴于上述原因,我们有了go语言的切片,可以把切片理解为,可变长度的数组,其实它底层就是使用数组实现的,增加了自动扩容功能,切片(slice)是一个拥有相同类型元素的可变长度的序列。

go语言切片的语法

声明一个切片和声明一个数组类似,只要不添加长度就可以了

1
var identifer []type

切片是引用类型,可以使用make函数来创建切片:

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

简写为:

1
slice1 := make([]type, len)

也可以指定容量,其中capacity为可选参数

1
make([]T, length, capacity)

这里len是数组的长度并且也是切片的初始长度。

golang map

map是一种key:value键值对的数据结构容器,map内部实现是哈希表hash。

map最重要的一点是通过key来快速检索数据,指向数据的值。

map是引用类型的。

map语法

可以使用内建函数make也可以使用map关键字来定义map

1
2
3
var map_variable map[key_data_type]value_data_type

map_variable = make(map[key_data_type]value_data_type)

map_variable: map的变量名称

key_data_type: key的数据类型

value_data_type: 值的数据类型

golang函数

golang函数介绍

函数的go语言中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用,函数包含函数的名称、参数列表和返回值类型,这些构成了函数的签名(signature)。

go语言中函数特性

1.go语言中有3种函数,普通函数,匿名函数(没有名称的函数)、方法(定义在struct上的函数)。

2.go语言中不允许函数重载(overload),也就是说不允许函数同名。

3.go语言中的函数不能嵌套函数,但可以嵌套匿名函数。

4.函数是一个值,可以将函数赋值给变量,使得这个变量也成为函数。

5.函数可以作为参数传递给另一个函数。

6.函数的返回值可以是一个函数。

7.函数调用的时候,如果有参数传递给函数,则先拷贝参数的副本,再将副本传递给函数。

8.函数可以没有名称。

go语言中的函数的定义和调用

函数在使用之前必须先定义,可以调用函数来完成某个任务。函数可以重复调用,从而达到代码重用。

go语言函数定义语法

1
2
3
4
5
func name ([parameter list] [return_type]){

​ 函数体

}

语法解析

func: 函数由func开始声明

name: 函数名称,函数名和参数列表一起构成函数签名。

[parameter list] : 参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数,参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不含参数。

[return_type]:返回类型 ,函数返回一列值。

golang函数类型与函数变量

可以使用type关键字来定义一个函数类型,语法格式如下:

1
type fun func(int, int) int

上面语句定义了一个fun函数类型,它是一种函数类型,这种函数接收两个int类型的参数并且返回一个int类型的返回值。

golang高阶函数

go语言的函数,可以作为函数的参数,传递给另外一个函数,作为另外一个函数的返回值返回。

golang匿名函数

go语言函数不能嵌套,但是在函数内部可以定义匿名函数,实现一下简单功能调用。

所谓匿名函数就是,没有名称的函数。

语法格式如下:

1
func (参数列表)(返回值)

当然可以没有参数,可以没有返回值

golang闭包

闭包可以理解应定义在一个函数内部的函数。在本质上,闭包是将函数外部连接起来的桥梁,或者说是函数和其引用环境的组合体。

闭包指的是一个函数和与其相关的引用环境组合而成的实体,简单来说,闭包=函数+引用环境

golang递归

函数内部调用函数自身的函数称为递归函数。

使用递归函数最重要的三点:

1.递归就是自己调用自己。

2.必须先定义函数的退出条件,没有退出条件,递归将成为死循环。

3.go语言递归函数很有可能会产生一大堆的goroutine, 也很可能会出现栈空间内存溢出问题。

golang结构

Go 中的结构也是一种数据结构,它可包含零个或多个任意类型的字段,并将它们表示为单个实体。

声明结构,使用struct关键字

结构嵌入

通过 Go 中的结构,可将某结构嵌入到另一结构中。 有时,你需要减少重复并重用一种常见的结构。

golang defer语句

go语言中的defer语句会将其后面跟随的语句进行延迟处理,在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句,最先被执行。

defer特性

1.关键字defer用于注册延迟调用

2.这些调用直到return前才被执行,因此,可以用来做资源清理

3.多个defer语句,按先进后出方式执行

4.defer语句中的变量,在defer声明时就决定了

defer用途

1.关闭文件句柄

2.锁资源释放

3.数据库连接释放

golang init函数

golang有一个特殊的函数init函数,先于main函数执行,实现包级别的一些初始化操作。

init函数的主要特点

init函数先于main函数自动执行,不能被其他函数调用;

init函数没有输入参数、返回值;

每个包可以有多个init函数;

包的每个源文件也可以有多个init函数,这点比较特殊;

同一个包的init执行顺序,golang没有明确定义,编程时要注意程序不要依赖这个执行顺序。

不同包的init函数按照包导入的依赖关系执行顺序。

golang初始化顺序

初始化顺序:变量初始化->init()->main()

golang指针

Go语言中的函数传参都是拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。

类型指针不能进行偏移和运算。

Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和 *(根据地址取值)。

指针地址和指针类型

每个变量在运行时都有拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&字符放在变量前面对变量进行取地址操作。Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:int 、 * int64、string等。

指针语法

一个指针变量指向了一个值的内存地址。(也就是我们声明了一个指针之后,可以像变量赋值一样,把一个值的内存地址放入到指针当中。)

类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:

1
var var_name *var-type

var-type: 为指针类型

var_name: 为指针变量名

*:用于指定变量是作为一个指针。

© 2022 DemoYang All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero