
go语言
文章平均质量分 56
学习go语言的过程
Hello YDL
这个作者很懒,什么都没留下…
展开
-
GO语言的GC(垃圾回收)原理
本文围绕 Go 语言的垃圾回收(GC)机制展开,首先介绍了 GC 的基本概念,包括其自动内存管理的作用、查找可回收对象的可达性分析法,以及 GC Roots 的类型和作用,强调 GC 主要回收堆上对象。接着阐述了 Go GC 的发展历程:Go 1.0 - 1.3 采用标记清除法,标记阶段 STW 影响性能;Go 1.5 引入三色标记法,存在对象丢失问题,通过插入和删除屏障解决;Go 1.8 引入混合写屏障,减少 STW;Go 1.9 及以后从多方面优化,提升了性能和效率。原创 2025-03-13 17:17:48 · 958 阅读 · 0 评论 -
使用protoc编译.proto文件生成go文件
只会生成一个pb.go文件,既可以作为client也可以作为server。在当前目录生成pb.g和grpc.go文件。原创 2022-11-12 20:01:19 · 1753 阅读 · 1 评论 -
solidity和合约转go
【代码】solidity和合约转go。原创 2022-11-05 20:00:58 · 364 阅读 · 0 评论 -
go语言整合jwt+gin框架实现token
go语言使用gin+jwt来实现鉴权。为了在访问接口的时候,先校验token,token校验不通过就不需要走后续的逻辑了。原创 2022-11-05 15:43:30 · 772 阅读 · 0 评论 -
go语言上传文件、读取文件内容和保存文件
【代码】go语言上传文件、读取文件内容和保存文件。原创 2022-11-05 13:31:11 · 1510 阅读 · 0 评论 -
go语言将[]byte转为string或者将string转为byte[]
【代码】go语言将[]byte转为string或者将string转为byte[]原创 2022-11-05 11:31:49 · 304 阅读 · 0 评论 -
go语言通过http请求将字符串转为文件流并下载文件
【代码】go语言通过http请求将字符串转为文件流并下载文件。原创 2022-11-04 21:25:46 · 829 阅读 · 0 评论 -
Unbuntu20安装RabbitMQ和go语言整合rabbitmq,实现实时监听的效果
在/etc/apt/sources.list.d目录下创建bintray.erlang.list文件,并在文件中输入以下内容(这里以Ubuntu20.04, Erlang版本为23.x为例子)在/etc/apt/preferences.d目录下的erlang文件中更改成以下内容(这里erlang选择23.0.3-1版本)在本步骤中向文件中输入的内容根据Ubuntu和Erlang版本的不同而不同,以下介绍版本的关系和选择。其中erlang-23.x代表选择了Erlang的23.x的版本。原创 2022-09-10 10:02:27 · 842 阅读 · 0 评论 -
window使用golang安装solc
a. File -> settings -> Plugins -> 设置 -> Install plugin from disk…-> Intellij-Solidity-2.1.6.zip -> OK。官方地址:https://plugins.jetbrains.com/plugin/9475-solidity/versions。在合约中点击鼠标右键 -> External Tools -> Solidity。2.goland 配置。以上通过本地安装好插件。原创 2022-09-10 09:31:54 · 738 阅读 · 0 评论 -
go语言使用tcp建立客户端和服务端
TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。一个TCP服务端可以同时连接很多个客户端,例如世界各地的用户使用自己电脑上的浏览器访问淘宝网。因为Go语言中创建多个goroutine实现并发非常方便和高效,所以我们可以每建立一次链接就创建一个goroutine去处原创 2022-09-10 09:31:39 · 1848 阅读 · 0 评论 -
golang软件中的go.mod文件中require内依赖报红
勾选 Enable Go modules integration.在Environment,点击右侧的目录。到此go.mod中的依赖就不会报错了。原创 2022-09-06 15:36:57 · 1480 阅读 · 0 评论 -
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件
Gin 是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助干团队的编码风格和形成规范。......原创 2022-08-16 16:24:06 · 1098 阅读 · 0 评论 -
[GIN-debug] Listening and serving HTTP on 8080 [GIN-debug] [ERROR] listen tcp: address 8080: missing
r.Run(“8080”) 改为 r.Run(“:8080”)2.仔细看代码,代码出错了。go语言使用gin启动端口失败。1.端口被占用(这种没遇到过)原创 2022-08-16 11:23:45 · 3304 阅读 · 0 评论 -
go语言操作es
注意下载与你的ES相同版本的client,例如我们这里使用的ES是7.2.1的版本,那么我们下载的client也要与之对应为github.com/olivere/elastic/v7。来连接ES并进行操作。原创 2022-08-15 16:29:46 · 802 阅读 · 0 评论 -
go语言整合etcd
etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。类似项目有zookeeper和consul。etcd具有以下特点:完全复制:集群中的每个节点都可以使用完整的存档高可用性:Etcd可用于避免硬件的单点故障或网络问题一致性:每次读取都会返回跨多主机的最新写入简单:包括一个定义良好、面向用户的API(gRPC)安全:实现了带有可选的客户端证书身份验证的自动化TLS快速:每秒10000次写入的基准速度。...原创 2022-08-15 15:45:08 · 408 阅读 · 0 评论 -
go语言的sarama,与kafka整合实现读取日志
截止当前时间,github上golang操作kafka的包主要有两个:saram 使用纯go语言编写, confluent-kafka-go 这是包装了c的api。原创 2022-08-15 10:26:55 · 1692 阅读 · 0 评论 -
go语言的tail
tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容 ,在日志收集中可以实时的监测日志的变化。执行main方法,此时我们的项目中没有my.log文件,控制台会一直等待。打开终端输入: go get。新建my.log文件。...原创 2022-08-12 19:53:11 · 310 阅读 · 0 评论 -
go语言中的context
上面的代码中,定义了一个50毫秒之后过期的deadline,然后我们调用context.WithDeadline(context.Background(), d)得到一个上下文(ctx)和一个取消函数(cancel),然后使用一个select让主程序陷入等待:等待1秒后打印overslept退出或者等待ctx过期后退出。当截止日过期时,当调用返回的cancel函数时,或者当父上下文的Done通道关闭时,返回上下文的Done通道将被关闭,以最先发生的情况为准。WithValue的用户应该为键定义自己的类型。.原创 2022-08-11 15:46:47 · 412 阅读 · 0 评论 -
go语言整合redis
从使用WATCH命令监视某个 key 开始,直到执行EXEC命令的这段时间里,如果有其他用户抢先对被监视的 key 进行了替换、更新、删除等操作,那么当用户尝试执行EXEC的时候,事务将失败并返回一个错误,用户可以根据这个错误选择重试事务或者放弃事务。Redis 是单线程执行命令的,因此单个命令始终是原子的,但是来自不同客户端的两个给定命令可以依次执行,例如在它们之间交替执行。下方的示例代码中使用pipiline一次执行了100个 Get 命令,在pipeline 执行后遍历取出100个命令的执行结果。..原创 2022-08-11 14:32:03 · 1205 阅读 · 0 评论 -
go语言整合mysql(增删改查)、事务管理以及sqlx库实现结构体数据快速绑定
普通SQL语句执行过程:客户端对SQL语句进行占位符替换得到完整的SQL语句。客户端发送完整SQL语句到MySQL服务端MySQL服务端执行完整的SQL语句并将结果返回给客户端。原创 2022-08-11 14:10:43 · 778 阅读 · 0 评论 -
go语言的性能基准测试、性能优化测试和性能调优
上面的基准测试只能得到给定操作的绝对耗时,但是在很多性能问题是发生在两个不同操作之间的相对耗时,比如同一个函数处理1000个元素的耗时与处理1万甚至100万个元素的耗时的差别是多少?方框之间的线条代表函数之间的调用关系。注意事项: 获取的 Profiling 数据是动态的,要想获得有效的数据,请保证应用处于较大的负载(比如正在生成中运行的服务,或者通过其他工具模拟访问压力)。火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短。...原创 2022-08-10 11:21:33 · 1084 阅读 · 0 评论 -
go语言的httpserver和httpclient
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。启动项目后,浏览器访问:127.0.0.1:9999/study,就可以看到效果。需要使用Go语言内置的net/url这个标准库来处理。原创 2022-08-10 09:26:31 · 366 阅读 · 0 评论 -
go语言的并发原理(goroutine)
单从线程调度讲,Go语言相比起其他语言的优势在于OS线程是由OS内核来调度的, goroutine 则是由Go运行时(runtime)自己的调度器调度的,完全是在用户态下完成的, 不涉及内核态与用户态之间的频繁切换,包括内存的分配与释放,都是在用户态维护着一块大的内存池, 不直接调用系统的malloc函数(除非内存池需要改变),成本比调度OS线程低很多。只要通道的容量大于零,那么该通道就属于有缓冲的通道,通道的容量表示通道中最大能存放的元素数量。Go 语言中的通道(channel)是一种特殊的类型。...原创 2022-08-09 15:38:14 · 1169 阅读 · 0 评论 -
go语言的ini文件配置读取
项目中我们可能经常要读取配置文件。那么如何读取自己写的配置文件呢?答案是反射。下面举例mysql的配置文件读取的具体操作代码。原创 2022-08-05 09:29:34 · 1175 阅读 · 0 评论 -
panic: reflect: reflect.Value.SetString using value obtained using unexported field
这是因为你的成员变量开头字母是小写的。go语言中,成员变量小写是私有的,访问不到的。原创 2022-08-04 21:24:31 · 728 阅读 · 0 评论 -
go语言的日志实现(打印日志、日志写入文件、日志切割)
Go语言内置的log包实现了简单的日志服务。log包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。...原创 2022-08-04 15:32:42 · 6426 阅读 · 0 评论 -
go语言的time包介绍
时间和日期是我们编程中经常会用到的,time 包提供了一些关于时间显示和测量用的函数。time 包中日历的计算采用的是公历,不考虑润秒。原创 2022-08-04 09:57:46 · 550 阅读 · 0 评论 -
golang打开文件和读写文件
os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。perm:文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。读到文件末尾时会返回0和io.EOF。...原创 2022-08-04 09:34:07 · 2430 阅读 · 0 评论 -
go module的介绍与应用
在Go语言的早期版本中,我们编写Go项目代码时所依赖的所有第三方包都需要保存在GOPATH这个目录下面。这样的依赖管理方式存在一个致命的缺陷,那就是不支持版本管理,同一个依赖包只能存在一个版本的代码。可是我们本地的多个项目完全可能分别依赖同一个第三方包的不同版本。...原创 2022-08-03 14:39:59 · 607 阅读 · 0 评论 -
go语言的接口
由于接口类型变量能够动态存储不同类型值的特点,所以很多初学者会滥用接口类型(特别是空接口)来实现编码过程中的便捷。在Go语言中接口是一个非常重要的概念和特性,使用接口类型能够实现代码的抽象和解耦,也可以隐藏某个功能的内部实现,但是缺点就是在查看源码的时候,不太方便查找到具体实现接口的类型。区别对于值接收者实现的接口,无论使用值类型还是指针类型都没有问题。接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。使用空接口实现可以接收任意类型的函数参数。...原创 2022-08-02 10:17:47 · 285 阅读 · 0 评论 -
go语言(函数、闭包、defer、panic/recover,递归,结构体,json序列化与反序列化)
func函数名(参数)(返回值){函数体}//定义typecalculationfunc(int,int)intfuncmain(){fmt.Println(c(1,2))}//add其实就是calculationfuncadd(x,yint)int{type类型名struct{字段名字段类型字段名字段类型…}p.age=12p.name="占山"p.hobby=[]string{......原创 2022-07-29 17:35:50 · 195 阅读 · 0 评论 -
go语言序列化和反序列化及序列化后的json为空和json的key值大写如何改为小写问题
在go语言中小写开头的变量是私有的,大写开头的变量是共有的。把person传入序列化的包中,那么就不是同一个包了,因此访问不到,序列化也就是null。假设在上述结构体中,我们给所有的成员变量都是小写开头,只有Animal是大写。{“name”“小花”,“age”121,“Animal”{“Name”“旺财”}}。{“Name”“小花”,“Age”121,“Animal”{“Name”“旺财”}}优化因为大写不符合书写的规范。因此我们想要拿到属性名是小写的json数据。......原创 2022-07-29 11:03:01 · 909 阅读 · 0 评论 -
go语言的基础语法(变量、常量、基本数据类型,for、switch,case、数组、slice(切片)、make和new、map)
必须指定数组的长度//定义一个长度为5元素类型为int的数组avara[5]intvarb[5]bool补充数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。...原创 2022-07-22 15:59:04 · 452 阅读 · 0 评论 -
go run,go build,go install有什么不同
go run,go build,go install有什么不同原创 2022-07-21 15:44:45 · 512 阅读 · 0 评论 -
go语言多返回值以及返回错误类型
假设有个值错误,我想告诉他错误的原因。这时候可以返回数值跟错误对象,go语言可以多返回值。假如我想多返回值,怎么办呢?原创 2022-07-21 10:26:28 · 838 阅读 · 0 评论