![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go语言基础
shockWaveGo
这个作者很懒,什么都没留下…
展开
-
GO语言小锤硬磕.二十二 管道(channel)
只写管道var mych chan原创 2023-04-19 11:39:58 · 377 阅读 · 0 评论 -
GO语言小锤硬磕.二十一 协程与锁
一个进程中至少有一个线程,我们称为主线程。一个线程中可以有任意多额协程,但在某一刻只能有一个协程在运行,多个协程分享所在线程分配到的计算机资源。这样就实现资源同步,但是避免资源竞争的同时也降低了程序的并发性能,程序由原来的并发执行变成了串行。在协程中,调用一个任务就像调用一个函数一样,消耗极少的资源,但能达到进程、线程相同的并发效果。进程:是程序在操作系统中的一次执行过程,是系统进行资源分配调度的基本单位。线程:是进程中的一个执行实例,是程序执行的最小单元。并发:是伪并行,是有选择的串行。原创 2023-04-10 15:45:26 · 510 阅读 · 0 评论 -
GO语言小锤硬磕、二十 字符串处理方法
如果字符串中包含中文,又想紧缺的计算字符串中字符的个数而不是占用的字节,那么必须先将字符串转换为rune类型的数组。Go语言的编码是UTF-8,在UTF-8中一个汉字占3个字节。2.查找子串在字符串中出现的位置。3.判断字符串是否包含子串。原创 2023-03-30 16:39:54 · 220 阅读 · 0 评论 -
GO语言小锤硬磕.十九 异常处理、中断程序、恢复程序
触发panic中断执行后,需要恢复程序,让程序继续之心,并且记录到底犯了什么错误。通过defer和recover来实现panic异常的捕获,让程序继续执行。go语言提供了一个叫panic函数,用于发生异常时终止程序继续运行。3.异常写在defer中,那么只有defer中的异常会被捕获。1.异常会沿调用堆栈向外传递,也可以在外层捕获。1.程序发生异常时,将异常信息反馈给使用者。2.程序发生异常时,立即退出终止程序运行。GO语言提供了两种处理异常的方式。2.多个异常只有第一个会被捕获。原创 2023-03-29 16:29:38 · 286 阅读 · 0 评论 -
GO语言小锤硬磕.十七 接口
go语言中的接口和现实生活中的USB插槽很像,它定义某种标准,但不关心具体实现。type 接口名称 interface{和结构体一样,接口也可以嵌入接口。原创 2023-03-24 17:42:06 · 90 阅读 · 0 评论 -
GO语言小锤硬磕.十八 类和面向对象
go语言坚持“组合优于继承”的原则,所谓的继承其实是利用结构体的组合实现的(匿名结构体属性)将成员变量隐藏起来,通过set和get方法实现对成员变量的访问,提高安全性和灵活性。多态简化了编程接口,允许类和类之间重用一些习惯性的命名,不用为每个新的方法命名新名字。(go语言的多态采用接口来实现,类实现了接口的所有方法,就可以通过接口类传递结构体类)无论是属性还是方法继承,都只能子类访问父类,不能父类访问子类。封装(类是数据与功能的封装,数据是成员白能量,功能是方法)猫-》动物 狗-》动物。原创 2023-03-25 11:01:17 · 325 阅读 · 0 评论 -
GO语言小锤硬磕.十六 指针
go语言中的方法一般用于将函数和结构体绑定在一起,让结构体除了能够保存数据外,还能够具备某些行为。go语言的方法其实就是一个特殊的函数,只不过这个函数是和某种属性类似绑定在一起而已。只需要在函数名称前面加上(接受者 数据类型)即可将函数和某种数据类型绑定一起。不能将函数内的指向局部变量的指针作为返回值,函数结束指向空间会被释放。方法的数据类型也是函数类型,所以可以定义变量保存(作为参数返回值等)可以将函数内部的局部变量作为返回值,本质是拷贝一份。go语言的指针(32位4个字节,64位8个字节)原创 2023-03-24 15:23:20 · 201 阅读 · 0 评论 -
GO语言小锤硬磕.十五 结构体
任何有命名的数据类型都可以作为匿名属性(int、float、bool、string、struct)只有属性名、属性类型、属性个数、排列顺序都相同的结构体类型才能转换。先定义结构体类型,再利用结构体类型定义结构体变量。属性名、属性类型、属性个数、排列顺序都是类型组成部分。没有指定属性名称,只有属性的类型,我们称为匿名属性。type 类型名称 struct{属性名称 属性类型。属性名称 属性类型。用来保存一组不同类型的数据。原创 2023-03-23 15:16:11 · 54 阅读 · 0 评论 -
go切片与数组的关系—修改切片导致数组被修改的问题
可以看到添加333时还没有超出切片A的容量,所以333还在数组D上做修改,而添加332时已经超出了A的容量,A换了一个新的数组(现有数据0、1、2、333复制过去),并且在新数组添加332,而不影响原来的数组D。下面的代码,先修改,修改发生在形参slice的底层数组上,也是实参slice的底层数组。可以看到A因为预设了[0:3:3]的原因,容量只有3,当前已满,再增加一个333,就切换了新的数组,所以A的修改只体现在自身,对B、数组D都没有影响。只要append就会切换到新的底层数组,不影响原来的数组。转载 2023-03-23 09:32:19 · 270 阅读 · 0 评论 -
GO语言小锤硬磕十三、数组与切片
可以简单理解为长度可以变化的数组,但是go语言的切片本质上是结构体,用来解决数组在应用中长度不可变的问题。相同,在比较时会按照“对应索引的元素”进行比较,所有元素都相同返回true,否则返回false。len int //切片长度(已经保存了多少个元素)go语言的数组是值类型,赋值和传参会复制整个数组。下一篇转载 修改切片导致数组被修改的问题深入 讲解。的数据,go语言数组也分一维数组和多维数组。的一部分,长度不同类型不同,不能比较。直接上代码看一下一维数组特性。原创 2023-03-23 09:31:57 · 207 阅读 · 0 评论 -
GO语言小锤硬磕十二、init函数和defer延迟调用关键词
先按层级import 包,从最后引入包中加载常量、变量、init(),返回上级包 继续执行 加载常量、变量、init()无论在函数内什么地方注册defer 语句,他都会在所属函数执行完毕后才会执行,并且如果注册了多个的defer语句,他们会按照。main包 --> 常量 -->全局变量 --> init函数 --> main函数 -->exit。package main 必须包含一个main 函数,但是每个package中的init函数都是可选的。函数(能够应用于所有的package)后进先出(先进后出)原创 2023-03-22 09:46:08 · 195 阅读 · 0 评论 -
GO语言小锤硬磕十一.匿名函数和闭包
匿名函数可以定义在函数外(全匿名函数),也可以定义在函数内(局部匿名函数),GO语言的普通函数不能嵌套定义,但是可以通过匿名函数来实现函数的嵌套定义。一般情况很少使用全局匿名函数,大多数情况都是使用局部匿名函数,匿名函数可以直接调用、保存到变量、作为参数或者返回值。普通函数的函数名是固定的,匿名函数的函数名称是系统随机的。当某个函数只需要调用一次时,可以使用匿名函数。是一个特殊的匿名函数,他是匿名函数和相关引用环境组成的整体。是函数的一种,格式和普通函数一样,只是定义时没有函数名。原创 2023-03-21 12:52:03 · 109 阅读 · 0 评论 -
GO语言小锤硬磕十、值传递和引用传递
go语言的值类型有:int系列、float系列、bool、string、数组、结构体。在函数体内修改值类型参数,不会影响到函数外的值。Go语言 引用类型:指针、slice、map、channel。函数体内修改引用类型参数,会影响到函数外的值。引用类型作为函数参数传递,是引用传递。值类型作为函数参数传递,是拷贝传递。引用类型通常在堆中分配存储空间。值类型通常在栈中分配存储空间。原创 2023-03-20 17:47:08 · 74 阅读 · 0 评论 -
GO语言小锤硬磕九、函数
func 函数名称(形参列表)(返回值列表){原创 2023-03-20 17:11:31 · 52 阅读 · 0 评论 -
GO语言小锤硬磕七_运算符
3)GO语言支持字符串+拼接 var str1 string ="xiaoming"+"xiaoli"2)自增,自减不支持前置,且他们是表达式,必须单独一行。a= i++错误 return i-- 错误。3.逻辑运算符 && ||!(逻辑非只能用于true或false)1)相同类型的数据才能运算。包括赋值,算术,关系。2.关系运算符(返回true 或 false)注意 指针类型只支持相等运算,不能做加减运算。原创 2023-03-19 00:22:16 · 52 阅读 · 0 评论 -
GO语言小锤硬磕六.获取命令行参数
1.虽然os可以获取参数,但是如果代码中定义了获取参数,但是执行命令时没传会报错,flag有默认值不传会使用默认值。package main包中包含main函数的文件,被称为命令文件。命令文件会执行编译检查,生成可执行文件,放到$GOPATH/bin。非命令文件执行编译检查,生成.a结尾的包,放到$GOPATH/pkg。命令文件编译检查,在当前目录下生成一个可执行文件。非命令文件执行编译检查,不会产生文件。go run 命令文件 编译并运行go程序。go env 查看当前go的环境变量。原创 2023-03-18 23:39:52 · 465 阅读 · 0 评论 -
GO语言小锤硬磕四_数据类型转换
1)强调GO语言不能够通过“ 数据类型(变量)" 的格式将"数值" 和 “字符串”互转。可以从大类型转换为小类型,可能会丢失精度。也可以从小类型转换为大类型。2)数值类型转字符 strconv.Format****3)字符串转数值类型 strconv.Parse***数据类型(需要转换的数据)2.数值类型和字符串之间传统转换。3.整型与字符串快速转换。1.数值类型之间的转换。原创 2023-03-17 15:48:05 · 62 阅读 · 0 评论 -
Go语言入门三.局部变量、全局变量、常量
2)常量组中如果上一行常量有初始值,但是下一行没有,那么下一行会赋值上一行的值。生命周期:从程序运行到定义哪一行开始分配存储空间到程序离开该变量所在的作用域。在同一常量组中,只要上一行出现了iota,后续会自动递增。GO语言常量分为:整型常量、实型常量、字符常量、字符串常量、自定义常量。在同一个常量组中,如果iota被中断,那么必须显示恢复。iota也支持常量组+多重赋值,在同一行iota值相同。const 常量名1,常量名2 int =值1,值2。在同一个常量组中,iota从0开始递增,每行递增1。原创 2023-03-15 16:53:59 · 678 阅读 · 0 评论 -
Go语言入门二.变量定义和注意要点
8)定义的局部变量或者导入的包没有被使用,那么编译器会报错,无法编译运行,但是定义的全局变量没有被使用编译器不会报错,可以编译运行。7)通过:=同时定义多个变量,只要任意一个变量没有定义过都会做退化赋值操作。4)使用:=定义变量时,不能指定var关键字和数据类型。6)使用:=同时定义多个变量,必须给所有变量初始化。3):=只能用于定义局部变量,不能定义全局变量。var 变量名 数据类型 = 值。可以定义时赋值,也可以先定义后赋值。5)变量组不能使用:=1.go语言定义变量的三种格式,原创 2023-03-15 14:58:14 · 137 阅读 · 0 评论 -
Go入门一:数据类型总览
派生类型:指针类型、数组、切片、Map、结构体、管道、函数、接口。基础类型:数值(整型、浮点型)、字符、布尔、字符串。go语言的数据类型主要分为基础类型和派生类型。go语言数据类型占用内存空间。原创 2023-03-15 11:29:29 · 50 阅读 · 0 评论