![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 85
王翊珩
Talk is cheap. Show me the code.
展开
-
结合gin框架在沙箱环境下实现支付宝电脑网站支付和当面支付
点击链接,扫码进入后,点击沙箱:点击沙箱应用,可以看到APPID,接口加签方式选择系统默认密钥就行,启用公钥模式。然后点击查看。由于后端使用go,我们选择非JAVA语言,这里我们只需要应用公钥和支付宝公钥。接下来我们在项目根目录新建配置文件分别将你的AppIdPrivateKey复制进去。其中NotifyURL是的异步通知地址,这个地址需要是公网地址,这样支付宝才可以访问然后给你发支付后的通知,ReturnURL。原创 2024-06-17 10:53:02 · 777 阅读 · 0 评论 -
Gin+WebSocket实战——在线聊天室WebSocketDemo详细使用教程
利用GinWebSocket实现的在线聊天室Demo项目,支持加入/离开聊天室广播、给其他用户发送消息等。原创 2024-04-25 15:31:38 · 1000 阅读 · 2 评论 -
Go+快速开始详细指南
Go+编程语言是为工程、STEM教育和数据科学设计的。对于工程:用儿童能掌握的最简单的语言工作。对于STEM教育:学习一门可以在未来工作中使用的工程语言。对于数据科学:用同一种语言与工程师交流。原创 2024-01-15 15:32:20 · 1214 阅读 · 0 评论 -
从零开始部署一个网站详细图文教程——腾讯云的服务器、SSL证书,阿里云的域名,七牛云的对象存储、CDN等
在部署网站这方面,我也算是第一次部署这么一个需要上线的项目,遇到了很多报错和苦难,折腾了很久,中间有多次查阅各方面的资料,学习到了很多内容,部署好后非常有成就感。给我印象最深的点就是要学好计算机网络,这样你就能比较清楚明白每一步在干什么。原创 2023-11-30 10:33:09 · 557 阅读 · 0 评论 -
手把手教你用gin+gorm+mysql实现多级评论
话不多说,先看多级评论的最后效果:并且评论可以一直嵌套下去,实现了无限评论与回复。有点类似于抖音app的评论区。原创 2023-10-23 16:56:11 · 312 阅读 · 0 评论 -
用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址,本机空闲端口详解
第二种方法依赖于第三方服务,如果该服务不可用,可能无法获取到IP地址。此外,由于这个方法涉及到网络通信,所以可能会比获取本地IP地址慢一些。同时该方法出错的风险也较高。下面的代码会打印出本机所有的IPv4地址。这个方法可能会返回多个IP地址,因为一台机器可能有多个网络接口,每个接口可能有一个或多个IP地址。经过比对,结果正确。我们可以发现如果我们的电脑是用WiFi上网的,用此方法得出的结果与WLAN的IPv4地址相同。那如果我们想获取本机的公网IP地址,那该怎么操作呢?经过和上图比对,结果正确。原创 2023-10-05 10:09:47 · 913 阅读 · 2 评论 -
我开源了一个加密算法仓库,支持18种算法!登录注册业务可用!
此存储库包含用 Go 编写的全面的密码哈希库。该库支持多种哈希算法,它允许可定制的盐长度、迭代、键长度和算法选择。这个开源项目旨在为开发人员提供一个多功能的工具,用于安全的密码存储和验证。SHA512SHA384SHA256SHA1Md5HMACArgon2BcryptScryptBlake2bBlake2sAESDES3DESRSARC4BlowfishECC一些加密过后的密码格式与Django。原创 2023-09-27 22:40:22 · 1103 阅读 · 0 评论 -
十小时开源了一个加密算法仓库,功能强大,后端开发人员狂喜!
该存储库包含一个用 Go 编写的综合密码哈希库。该库支持多种哈希算法,包括 PBKDF2(使用 SHA1、SHA256、SHA384、SHA512 和 MD5)、Bcrypt、Scrypt、Argon2、HMAC、Blake2b 和 Blake2s。它允许自定义盐长度、迭代、密钥长度和算法选择。该开源项目旨在为开发人员提供用于安全密码存储和验证的多功能工具。尤其是后端开发人员,在实现登录注册业务中通常会遇到密码加密和验证的问题,该库可以很好的解决这个问题,功能强大。原创 2023-09-23 19:19:29 · 373 阅读 · 0 评论 -
分别用Python和Go实现对文件夹及其子文件夹里的文件进行批量重命名
多神奇的命名,害,由于资料是从小道途径获得的,咱就忍了。接下来就是要批量对这些文件改名的问题,我粗略算了下,有上千个的文件需要改。对于程序员来说,总不能挨个挨个文件重命名吧,于是我就写了两个脚本,一个。版本,均能批量对文件夹及其子文件夹里的文件进行批量重命名,去掉烦人的"信息",亲测体检较好。附上一张代码运行结果图,可以看到重命名了。除了上述的文件,还有一。最近在继续提高自己的。原创 2023-09-21 20:04:35 · 354 阅读 · 0 评论 -
Go语言的单元测试与基准测试详解
并且测试文件与要被测试的文件需要放在同一个包中,并不像Java那样需要将所有的测试文件放在一个专门的测试文件夹里面,例如我将这两个文件都放在。go test 命令默认不运行 benchmark 用例的,如果我们想运行 benchmark 用例,需要加上 -bench 参数。用于以详细模式运行测试并提供更多的输出信息,有助于更深入地了解测试的运行情况。是基准测试的循环次数,它会根据不同的运行情况自动调整,以保证结果的可比性。标志是很有帮助的,但在持续集成和自动化测试中,可能更倾向于使用简洁的。原创 2023-09-19 11:12:30 · 639 阅读 · 0 评论 -
Gin+微服务实现抖音视频上传到七牛云
如果你对Gin和微服务有一定了解,看本文较容易。也就是说data数据是bytes类型,这意味着我们通过Gin从前端获取的视频要转化为字节数组,这样才能传给相应的微服务,然后对应的微服务实现视频上传。原创 2023-08-20 14:51:45 · 765 阅读 · 0 评论 -
解决[GIN-debug] redirecting request 307和[GIN-debug] redirecting request 301并允许跨域请求
如果当前路由无法匹配,但存在带(不带)尾斜杠的路径的处理程序,则启用自动重定向。例如,如果/foo/被请求,但是路由只存在于/foo,那么客户端将被重定向到/foo,GET 请求的 HTTP状态码是301,其他所有请求方法的路由是307。,就会出现这个错误,但是亲测用postman或者apifox不会出现这种报错,而我用app调试确出现了这种错误。所以究其原因是我新增加的部分路由多了"/",我将其删掉后,问题得到解决。这个问题在于你注册的路由和实际请求的路由不相匹配。,多多留意你的路由是否少了。原创 2023-08-18 23:35:38 · 895 阅读 · 0 评论 -
大厂程序员使用Redis案例之连续签到
Redis(全称为Remote Dictionary Server)是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。Redis 支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构提供了丰富的操作命令,使得开发者可以方便地处理各种数据需求。原创 2023-08-13 18:41:44 · 296 阅读 · 0 评论 -
完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)
gofumpt:gofumpt 是一个用于格式化Go代码的工具,它是 `gofmt` 的替代品。`gofmt` 是Go语言官方提供的代码格式化工具,而 `gofumpt` 是在 `gofmt` 基础上进行改进的,旨在强制执行一种更加一致和规范的代码风格。原创 2023-08-13 14:17:58 · 1703 阅读 · 0 评论 -
Ubuntu详细配置Golang开发环境教程,建议收藏
下载第三包库时没有权限新建文件夹的错误,如果你想挨着挨着手动创建不嫌麻烦也可以不执行上面的命令。下所有文件夹的权限,可以避免。最后如果想把源代码放到。进入配置文件后,输入。原创 2023-08-12 11:35:33 · 1498 阅读 · 0 评论 -
beego实现文件上传到七牛云详细教程
Go SDK 的所有的功能,都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的。当然go的其他框架也能用这个函数,可能或有些许的修改,注意。我将上传文件的代码封装在了函数。函数需要传三个参数~原创 2023-08-10 13:40:43 · 431 阅读 · 0 评论 -
Xorm开发详细文档
xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。xorm支持两种风格的混用。跟名称相关的函数包含在下。名称映射规则主要负责结构体名称到表名和结构体 field 到表字段的名称映射。由接口的实现者来管理,xorm 内置了三种Mapper和。SnakeMapper 支持struct为驼峰式命名,表结构为下划线命名之间的转换,这个是默认的Maper;原创 2023-08-07 15:31:32 · 791 阅读 · 0 评论 -
从gRPC入门到放弃
像许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。默认情况下,gRPC 使用作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构。可以根据需要使用其他的IDL代替。例如,下面使用 protocol buffers 定义了一个服务。在gRPC中你可以定义四种类型的服务方法。普通 rpc,客户端向服务器发送一个请求,然后得到一个响应,就像普通的函数调用一样。服务器流式 rpc,其中客户端向服务器发送请求,并获得一个流来读取一系列消息。原创 2023-08-04 16:27:19 · 331 阅读 · 0 评论 -
RPC原理与Go RPC详解
RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。首先与RPC(远程过程调用)相对应的是本地调用。原创 2023-08-04 16:24:53 · 1793 阅读 · 0 评论 -
Go语言性能优化建议与pprof性能调优详解——结合博客项目实战
相反,它会共享同一个底层数组。这种情况下,如果我们从一个大切片中截取出一个小切片,并且在代码中保留对大切片的引用,那么原底层数组将会一直存在于内存中,得不到释放,即使大切片的内容对我们来说已经不再需要了。线条上的数字表示函数调用的时间。获取的 Profiling 数据是动态的,要想获得有效的数据,请保证应用处于较大的负载(比如正在生成中运行的服务,或者通过其他工具模拟访问压力)。火焰图的调用顺序从上到下,每个方块代表一个函数,它下面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短。原创 2023-08-01 21:48:25 · 1177 阅读 · 0 评论 -
使用Beego和MySQL实现帖子和评论的应用,并进行接口测试(附源码和代码深度剖析)
经过对需求的分析,我增加了一些额外的东西,比如增加了user用户,因为我考虑到帖子或者是评论(跟回帖差不多)都会有作者,主要的功能有增加帖子、查看所有或单个帖子、增加评论、查看某个帖子的所有评论或单个评论。数据我是将它存在数据库中,而不是内存中。首先终端运行新建一个beego项目,api命令可以让我们很方便地实现API应用。在IDE打开生成的项目,并配置app.conf中关于数据库的部分。数据库我选用MySQLapp.conf数据库命名为post,因此我先在Navicat。原创 2023-07-30 17:54:45 · 526 阅读 · 0 评论 -
Go语言进阶语法八万字详解,通俗易懂
最后,我们来测试一下这3种拷贝需要花费时间,拷贝的文件都是一样的一个mp4文件(400M)。第一种:io包下Read()和Write()直接读写:我们自己创建读取数据的切片的大小,直接影响性能。拷贝完毕。。401386819401386819第三种:ioutil包401386819这3种方式,在性能上,不管是还是io.Copy()还是ioutil包,性能都是还不错的。Go是并发语言,而不是并行语言。原创 2023-07-29 12:19:25 · 752 阅读 · 0 评论 -
Go语言基础语法八万字详解,对小白友好
变量是为存储特定类型的值而提供给内存位置的名称。在go中声明变量有多种语法。所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变var名称类型是声明单个变量的语法。声明一个变量第一种,指定变量类型,声明后若不赋值,使用默认值第二种,根据值自行判定变量类型(类型推断Type inference)如果一个变量有一个初始值,Go将自动能够使用初始值来推断该变量的类型。因此,如果变量具有初始值,则可以省略变量声明中的类型。第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的(多个变原创 2023-07-28 17:17:40 · 516 阅读 · 0 评论 -
beego开发文档(提取总结于官方文档,小白必看)
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。beego 的整体设计架构如下所示:beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻原创 2023-07-21 16:31:02 · 3345 阅读 · 0 评论 -
对github项目提PR 请求的保姆级教程——以修改casdoor项目的swagger文档为例,干货满满
PR(Pull Request) 即`拉取请求`,是 GitHub 上进行协同开发的一种非常常用的方式。它的基本流程是:1. 开发者fork一个开源项目的代码库,将其克隆到本地。2. 在本地对代码进行修改、添加新功能等。3. 将本地修改后的代码push到开发者自己的代码库中。4. 在开源项目的代码库中,发起一个pull request,请求项目维护者将开发者的代码merge到项目主代码库中。5. 项目维护者review代码,如果没有问题则approve并merge该PR。6. 开发者的代码就正原创 2023-07-20 15:56:24 · 1210 阅读 · 0 评论 -
Gin+Gorm练手小项目bubble清单企业级结构剖析
本项目来源于——基于gin+gorm开发的练手小项目,通过该项目可初识go web开发该有的姿势。笔者对代码有些许修改,以下是项目成功运行的截图,主要功能有添加,删除,确认,查看待办事项等(所以是小项目啦~)原创 2023-07-19 19:05:37 · 1099 阅读 · 1 评论 -
Gorm详细指南,结合官方文档,小白必看
中文官方网站内含十分齐全的中文文档,有了它你甚至不需要再继续向下阅读本文。gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。在使用ORM工具时,通常我们需要在代码中定义模型(Models)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或它们的指针。同时也支持及接口(interfaces)。Name string Age sql . NullInt64 //零值类型 Birthday * time . Time。原创 2023-07-19 14:44:04 · 6955 阅读 · 0 评论 -
部署开源项目 Casdoor 身份认证管理系统到本地
是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的,UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。使用 Go 和react开发,前后端分离,内置第三方应用登录服务。Casdoor 有四个核心概念,分别是用户(User)和。组织承载用户和应用,一个用户只能隶属于一个组织,但可以登录到自己组织的多个应用中;而提供商则代表了某种身份验证方式,例如电子邮件验证、短信验证、OAuth 验证等。原创 2023-07-18 15:41:24 · 2867 阅读 · 0 评论 -
深入浅出Gin框架,看这一篇就够了
Gin是一个简单、快速而强大的Web框架,适用于构建各种规模的Web应用程序。它的设计理念是简洁、高效和易用,可以帮助开发人员快速构建高性能的Web服务。无论是构建API服务、Web应用还是微服务,Gin都是一个不错的选择。它具有类似martini的API,但性能要好得多,多亏了httprouter,速度提高了40倍。如果您需要性能和良好的生产力,您一定会喜欢Gin。执行模板时,函数从两个函数字典中查找:首先是模板函数字典,然后是全局函数字典。一般不在模板内定义函数,而是使用Funcs方法添加函数到模板里。原创 2023-07-14 22:28:22 · 1985 阅读 · 0 评论 -
Go实现socks5服务器
SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。解释:主函数开始监听在本地地址(127.0.0.1)的1080端口上,接受客户端的连接请求,并在新的goroutine中处理客户端连接。原创 2023-07-09 12:33:08 · 1402 阅读 · 0 评论 -
Go实现在线词典翻译(三种翻译接口,结合sync)
用go实现调用火山翻译、彩云翻译、百度翻译接口,并结合goroutine加快查询速率原创 2023-07-08 20:34:01 · 1826 阅读 · 0 评论 -
猜谜游戏(Go实现)
这段Go代码是一个简单的猜数字游戏。程序开始时会生成一个随机的秘密数字,并提示玩家输入猜测的数字。玩家每次输入一个数字后,程序会告诉玩家这个数字是偏大还是偏小,直到玩家猜对为止。如果输入非数字或者在读取输入时出现错误,程序会提示玩家重新输入。玩家猜对秘密数字后,游戏结束并输出"Correct, you Legend!原创 2023-07-08 20:13:14 · 574 阅读 · 0 评论 -
反射详解~Go进阶
Go语言的反射就是建立在类型之上的,Golang的指定类型的变量的类型是静态的(也就是指定int、string这些的变量,它的type是static type),在创建变量的时候就已经确定,反射主要与Golang的interface类型相关(它的type是concrete type),只有interface类型才有反射一说。当向接口变量赋予一个实体类型的时候,接口会存储实体的类型信息,反射就是通过接口的类型信息实现的,反射建立在类型的基础上。value是实际变量值,type是实际变量的类型。原创 2023-07-08 10:51:42 · 459 阅读 · 0 评论 -
select语句与CSP模型~Go进阶
Golang 的 channel 将 goroutine 隔离开,并发编程的时候可以将注意力放在 channel 上。在一定程度上,这个和消息队列的解耦功能还是挺像的。如果大家感兴趣,还是来看看 channel 的源码吧,对于更深入地理解 channel 还是挺有用的。Go 通过 channel 实现 CSP 通信模型,主要用于 goroutine 之间的消息传递和事件通知。原创 2023-07-07 18:06:32 · 553 阅读 · 1 评论 -
channel通道详解~Go进阶
通道是什么,通道就是goroutine之间的通道。它可以让goroutine之间相互通信。每个通道都有与其相关的类型。该类型是通道允许传输的数据类型。(通道的零值为nil。nil通道没有任何用处,因此通道必须使用类似于map和切片的方法来定义。原创 2023-07-07 16:40:57 · 2552 阅读 · 0 评论 -
sync包~Go进阶
sync是synchronization同步这个词的缩写,所以也会叫做同步包。这里提供了基本同步的操作,比如互斥锁等等。这里除了Once和WaitGroup类型之外,大多数类型都是供低级库例程使用的。更高级别的同步最好通过channel通道和communication通信来完成。原创 2023-07-06 20:31:28 · 242 阅读 · 1 评论 -
runtime包与临界资源~Go进阶
不要以共享内存的方式去通信,而要以通信的方式去共享内存。在Go语言中并不鼓励用锁保护共享状态的方式在不同的Goroutine中分享信息(以共享内存的方式去通信)。而是鼓励通过channel将共享状态或共享状态的变化在各个Goroutine之间传递(以通信的方式去共享内存),这样同样能像用锁一样保证在同一的时间只有一个Goroutine访问共享状态。当然,在主流的编程语言中为了保证多线程之间共享数据安全性和一致性,都会提供一套基本的同步工具集,如锁,条件变量,原子操作等等。原创 2023-07-06 19:45:42 · 259 阅读 · 0 评论 -
Goroutine并发模型~Go进阶
go中使用Goroutine来实现并发concurrently。Goroutine是Go语言特有的名词。区别于进程Process,线程Thread,协程Coroutine,因为Go语言的创造者们觉得和他们是有所区别的,所以专门创造了Goroutine。Goroutine是与其他函数或方法同时运行的函数或方法。Goroutines可以被认为是轻量级的线程。与线程相比,创建Goroutine的成本很小,它就是一段代码,一个函数入口。原创 2023-06-14 08:56:54 · 133 阅读 · 0 评论 -
ioutil包与并发编程初识~Go进阶
Go是并发语言,而不是并行语言。在讨论如何在Go中进行并发处理之前,我们首先必须了解什么是并发,以及它与并行性有什么不同。并发性Concurrency是同时处理许多事情的能力。举个例子,假设一个人在晨跑。在晨跑时,他的鞋带松了。现在这个人停止跑步,系鞋带,然后又开始跑步。这是一个典型的并发性示例。这个人能够同时处理跑步和系鞋带,这是一个人能够同时处理很多事情。什么是并行性parallelism,它与并发concurrency有什么不同?并行就是同时做很多事情。这听起来可能与并发类似,但实际上是不同的。原创 2023-06-13 11:19:46 · 278 阅读 · 0 评论 -
断点续传与bufio包~Go进阶
先说一下思路:想实现断点续传,主要就是记住上一次已经传递了多少数据,那我们可以创建一个临时文件,记录已经传递的数据量,当恢复传递的时候,先从临时文件中读取上次已经传递的数据量,然后通过Seek()方法,设置到该读和该写的位置,再继续传递数据。所以bufio就提供了缓冲区(分配一块内存),读和写都先在缓冲区中,最后再读写文件,来降低访问本地磁盘的次数,从而提高效率。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。原创 2023-06-12 15:00:22 · 78 阅读 · 0 评论