
Golang编程
啤酒味的大白兔
一个Go语言学习者
展开
-
Golang:并发
进程定义:进程 是并发执行的程序中分配和管理资源的基本单位。线程定义:线程是进程的执行单元,是进行调度的实体,是比进程更小的独立运行单位。原创 2023-04-23 19:27:49 · 457 阅读 · 0 评论 -
Golang:错误处理
【代码】Golang:错误处理。原创 2023-04-23 19:26:05 · 116 阅读 · 0 评论 -
匿名函数和闭包
如果你想关闭某个使用的资源,在使用的时候随手defer,因为defer有延迟执行机制(函数执行完毕再执行defer压入栈的语句)在函数中,程序员经常需要创建资源,为了在函数执行完毕后,及时的释放资源,go的设计者提供了defer关键字。闭包本质上依旧是一个匿名函数,只是这个函数引入外界的变量/参数。闭包中使用的变量/参数会一直保存在内存中,比较占用内存。匿名函数中引用的变量会一直保存在内存中,可以一直使用。匿名函数+引用的变量/参数 = 闭包。原创 2023-04-23 19:24:47 · 121 阅读 · 0 评论 -
Golang:结构体
在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。通过Type关键字的定义,MyInt就是一种新的类型,它具有int的特性。类型定义和类型别名结构体将多个不同类型命名字段序列打包成一个复合类型字段名必须唯一,可用”_“补位,支持使用自身指针类型成员,字段名,排列顺序属类型组成部分。除对齐处理外,编译器不会优化、调整内存布局。原创 2023-04-23 19:20:45 · 117 阅读 · 0 评论 -
Map注意点
程序运行时会对map并发操作进行检测,如果某个任务正在进行对map的写操作,那么其他任务就不能对该map执行并发操作(读,写,删除),否则会导致程序崩溃。访问不存在的键值,默认返回零值,不会引发错误,但推荐使用ok-idiom模式,毕竟通过零值无法判断键值是否存在,或许存储的value本就是零。因内存访问安全和哈希算法等缘故,字典被设计成“not addressable”,故不能直接修改“value”成员(结构或数组)3、key是不可以重复的,如果遇到重复,后一个value会替换前一个value。原创 2023-04-23 19:19:12 · 114 阅读 · 0 评论 -
切片注意点及其底层原理
0原创 2023-04-23 19:18:20 · 99 阅读 · 0 评论 -
字符串易漏点
字符串是不可变字节(byte)序列,其本身是一个复合结构头部指针指向字节数组内置函数len返回字节数组的长度,cap不接受字符串类型参数。原创 2023-04-23 19:17:27 · 55 阅读 · 0 评论 -
流程控制特别注意点
所以在处理数据巨大的多次遍历操作时,尽量不要使用range,容易造成堆栈溢出。遍历key为string类型的map并同时获取key和value。switch语句也可用于接口类型匹配,详见后续文章。遍历key为整型递增的map。遍历array和slice。(主要是使用场景不同)原创 2023-04-23 19:16:23 · 89 阅读 · 0 评论 -
Golang:指针
中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。并非所有对象都能进行取地址操作,但变量总是能正确返回,。指针运算符为左值时,我们可更新目标对象状态,而为右值时则是为了获取目标状态。内存地址是内存中每个字节单元的唯一编号,而指针则是一个实体。指针类型支持相等运算符,但不能做加减法运算和类型转换,如果两个指针指向同一地址,或都为nil,那么它们相等。2·ptr:用于接收地址的变量,ptr的类型就为*T,称做T的指针类型。1·v:代表被取地址的变量,类型为T。原创 2023-04-23 19:14:53 · 240 阅读 · 0 评论 -
new和make的区别和联系
当然,new函数也可为引用类型分配内存,但这是不完整创建,以map为例,它仅分配了字典类型本身(实际上就是一个指针包装)所需内存,并没有分配键值存储内存,也没有初始化散列桶等内部属性,因此它无法正常工作。引用类型必须使用make函数创建,编译器会将make转化为目标类型专用的创建函数(或指令),以确保完成全部内存分配和相关属性初始化。内置函数new按指定类型长度分配零值内存,返回指针,并不关心类型内部构造和初始化方式。3.而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。原创 2023-04-23 19:13:09 · 258 阅读 · 0 评论 -
Golang:常用命令
go doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包。go install用于编译并安装指定的代码包及它们的依赖包。go list命令的作用是列出指定的代码包的信息。原创 2023-03-14 21:19:46 · 249 阅读 · 0 评论 -
Golang:基本类型
标准库math定义了各数字类型的取值范围math.MinInt8等...标准库strconv可在不同进制(字符串)间转化查看字节数:unsafe.Sizeof(num)查看类型:%Tgolang程序中整数变量在使用时,遵守保小不保大(存储空间)浮点类型容易造成精度损失底层存储:符号位+指数位+尾数位(尾数位数据比较模糊)3.14->314E-2(科学计数法)float32、float64可以表示正负golang中浮点数类型默认为float64。原创 2023-03-14 21:40:37 · 334 阅读 · 1 评论 -
Golang:变量和常量
golang变量和常量学习笔记原创 2022-12-03 21:40:44 · 374 阅读 · 1 评论 -
Golang:iota(枚举)
Go并没有明确意义上的enum(枚举)定义,不过可借助iota标识符实现一组自增常量值来实现枚举类型 自增作用范围为常量组,可在多常量定义中使用多个iota,它们各自单独计数,只许确保组中每行常量的列数量相同即可 如果需要中断iota自增,则需要显示恢复,且后值会与上一行常量右值表达式相同 自增默认数据类型是int,可以显示转换原创 2022-12-04 22:25:46 · 554 阅读 · 0 评论