Go进阶
文章平均质量分 83
码农印象
修炼的过程中,最好有人和你并肩而行,共同成长!努力做一个文邹邹的工具人,你做得越多,你知道的越多......
展开
-
go-zero 实战之 blog 系统
本文以 的网站后台为例,着重介绍一下如何使用 开发 的用户模块。本文涉及的所有资料都已上传 github 仓库 kougazhang/go-zero-demo,感兴趣的同学可以自行下载。用户模块是后台管理系统常见的模块,它的功能大家也非常熟悉。管理用户涉及到前端操作,用户信息持久化又离不开数据库。所以用户模块可谓是 “麻雀虽小五脏俱全”。本文将详细介绍一下如何使用 go-zero 完成用户模块功能,如:用户登录、添加用户、删除用户、修改用户、查询用户 等(完整的 api 文件请参考仓库代码)。blog转载 2022-07-10 14:53:59 · 603 阅读 · 0 评论 -
多图详解万星 Restful 框架原理与实现
我们先通过 自带的命令行工具 来生成一个 ,其 函数如下:解析配置文件将配置文件传入,初始化 初始化 将 注入 中:注册路由将 中的启动的 同时注入到 当中启动 接下来我们来一步步讲解其设计原理!Let’s Go!从日常开发经验来说,一个好的 web 框架大致需要满足以下特性:上图描述了 rest 处理请求的模式和大部分处理路径。下面我们来细说一下整个 rest 是如何启动的?上图描述了整体 server 启动经过的模块和大致流程。准备按照如下流程分析 rest 实转载 2022-07-10 14:36:51 · 405 阅读 · 0 评论 -
定制个机器人帮你和Ta聊天
这是基于200万聊天记录训练出来的,你可以用自己和女朋友的记录训练了试试效果 😛至于微信机器人怎么用,你可以 搜搜看哈 是一个通过已知对话数据集快速生成回答的 Go 问答引擎。好多年前,当我们需要一个聊天机器人的时候,我是先用了 ,但是使用下来,我们的1.2亿对话语料训练后的模型回答一个问题需要21秒左右,实在没法接受。仔细看了 源码之后,我用 Go 重新实现了一个,并用 go-zero 的 MapReduce 框架做了并行优化,结果我们一个回答平均耗时大概18毫秒。国庆假期,我有...转载 2022-07-10 14:33:41 · 248 阅读 · 0 评论 -
用 Go + WebSocket 快速实现一个 chat 服务
在 开源之后,非常多的用户询问是否可以支持以及什么时候支持 ,终于在 里面我们从框架层面让 的支持落地了,下面我们就以 作为一个示例来讲解如何用 来实现一个 服务。我们以 中的 聊天室为例来一步步一讲解 的实现,分为如下几个部分:先放一张图,大致的数据传输:中间有个 就是整个 的 。首先要支撑双方通信:数据流是 的主要功能,先不急着看代码,我们先想 怎么接入并被 感知:这样,新接入的 就被加入到 注册 通道中。发出了 注册 的动作, 会怎么处理呢?接收注册消息 -> 加入转载 2022-07-10 14:02:42 · 686 阅读 · 0 评论 -
高可用延迟队列设计与实现
延迟队列:一种带有 的消息队列这样解释,整个设计就清楚了。你的目的是 延时,承载容器是 mq。列举一下我日常业务中可能存在的场景:为了解决以上问题,最简单直接的办法就是定时去扫表:几个缺点:最大问题其实是什么?调度模型基本统一,不要做重复的业务逻辑我们可以考虑将逻辑从具体的业务逻辑里面抽出来,变成一个公共的部分。而这个调度模型,就是 延时队列 。其实说白了:延时队列模型,就是将未来执行的事件提前存储好,然后不断扫描这个存储,触发执行时间则执行对应的任务逻辑。那么开源界是否已有现成的方案呢?答案是肯定的。转载 2022-07-10 13:42:20 · 298 阅读 · 0 评论 -
服务注册与发现的原理和实现
对于搞微服务的同学来说,服务注册、服务发现的概念应该不会太陌生。简单来说,当服务A需要依赖服务B时,我们就需要告诉服务A,哪里可以调用到服务B,这就是服务注册发现要解决的问题。服务注册是针对服务端的,服务启动后需要注册,分为几个部分:当一个服务节点起来之后,需要把自己注册到 上,便于其它节点来发现自己。注册需要在服务启动完成并可以接受请求时才会去注册自己,并且会设置有效期,防止进程异常退出后依然被访问。定时续期相当于 ,定期告诉 自己还在,能够继续服务。当进程退出时,我们应该主动去撤销注册信息,便于调用转载 2022-07-10 11:34:01 · 830 阅读 · 0 评论 -
听说过对 Go map 做 GC 吗?
在 Golang 中的 map 结构,在删除键值对的时候,并不会真正的删除,而是标记。那么随着键值对越来越多,会不会造成大量内存浪费?首先答案是会的,很有可能导致 OOM,而且针对这个还有一个讨论:github.com/golang/go/issues/20135。大致的意思就是在很大的 中, 操作没有真正释放内存而可能导致内存 OOM。所以一般的做法:就是 重建map。而 中内置了 的容器组件。 在一定程度上可以避免这种情况发生。那首先我们看看 原生提供的 是怎么删除的?测试代码如上,我们可以转载 2022-07-10 11:24:54 · 327 阅读 · 0 评论 -
最简单的 K8S 部署文件编写姿势
首先,你需要知道有这些知识点,其次要把这些知识点都搞明白也不容易,再次,每次编写依然容易出错!前一篇文章 讲解了如何快速创建自己的服务镜像,不过为了演示,这篇文章我们以 镜像为例。首先安装 工具一键生成K8S部署文件生成的 文件如下:部署服务,如果 namespace不存在的话,请先通过 创建查看服务允许状态测试服务4. 总结 工具极大简化了 K8S yaml 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。本文转自 https://learnku.com/a转载 2022-07-10 09:24:28 · 380 阅读 · 0 评论 -
从代码到部署微服务实战
当前微服务已经成为服务端开发的主流架构,而Go语言因其简单易学、内置高并发、快速编译、占用内存小等特点也越来越受到开发者的青睐,微服务实战系列文章将从实战的角度和大家一起学习微服务相关的知识。本系列文章将以一个“”由浅入深的和大家一起一步步搭建起一个完整的微服务系统该篇文章为微服务实战系列的第一篇文章,我们将基于go-zero+gitlab+jenkins+k8s构建微服务持续集成和自动构建发布系统,先对以上模块做一个简单介绍:实战主要分为五个步骤,下面针对以下的五个步骤分别进行详细的讲解首先我们搭建实验环转载 2022-07-09 23:51:55 · 396 阅读 · 0 评论 -
最简单的Go Dockerfile编写姿势
选择最简单的镜像比如alpine,整个镜像5M左右设置镜像时区2. 多阶段构建第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像3. 完整Dockerfile编写过程首先安装 工具在 项目下创建一个 服务文件结构如下:在 目录下一键生成 内容如下:在 目录下 镜像查看镜像可以看出镜像大小约为18M。启动服务测试服务4. 总结 工具极大简化了 文件的编写,提供了开箱即用的最佳实践,并且支持了转载 2022-07-09 12:31:18 · 1163 阅读 · 0 评论 -
基于gRPC的注册发现与负载均衡的原理和实战
gRPC是一个现代的、高性能、开源的和语言无关的通用RPC框架,基于HTTP2协议设计,序列化使用PB(Protocol Buffer),PB是一种语言无关的高性能序列化框架,基于HTTP2+PB保证了的高性能。go-zero是一个开源的微服务框架,支持http和rpc协议,其中rpc底层依赖gRPC,本文会结合gRPC和go-zero源码从实战的角度和大家一起分析下服务注册与发现和负载均衡的实现原理原理流程图如下:从图中可以看出go-zero实现了gRPC的resolver和balancer接口,然后通过转载 2022-07-09 11:56:44 · 387 阅读 · 0 评论 -
【protobuf 】protobuf 升级后带来的一些坑
升级后带来的一些坑原创 2022-06-25 18:42:31 · 1647 阅读 · 0 评论 -
【Go语言】Go语言我们应该这样学~全网较全的学习教程
哈喽,我是一个初级的互联网玩家,致力于分享各领域优质开源项目。这是一篇可以让你受益终身的 Go 精华文章,汇聚了圣经级 500 + Go开源项目的精华,Go 开源电子书、Go学习路线图!建议你花 2 分钟读完这篇回答,可以帮你节省 90% 的找书时间,一定要坚持读到最后。Go-web编程百度云链接 提取码:pm8sGo并发实战链接 提取码:4endGo语言编程链接 提取码:lhfkG语言标准库链接:提取码:ax5nGo语言程序设计:提取码:d35wGo语言圣经:提取码:q8mrGo语言实战:提取码:ikaq原创 2022-06-17 15:42:12 · 1021 阅读 · 0 评论 -
【Go进阶】终端版学生管理系统
在学习Go语言基础后,为了巩固语言基础,我将用Go语言开发一个简易的学生管理系统,以此来简单地整合一下自己近期所学的知识!下面就开始我Go语言的第一个管理系统的编写吧~需求分析该简易版的学生管理系统主要是以管理员视角来执行程序中所编写的相关功能。当然我们学生管理系统最基本的功能当然离不开基本的增删查改功能啦~下面是我对该系统简单理解目录结构演示数据库表结构create table student( I_ID bigint unsigned auto_inc原创 2022-05-23 21:22:41 · 207 阅读 · 0 评论 -
【Go进阶】并发下载器
大家好,我是 polarisxu。今天为大家带来一个实战项目。建议你一定要动手实践。在往下看之前,你不妨思考下,用 Go 如何实现一个并发下载器。(我之前有推荐过一个类似的开源项目:推荐三个Go实战开源项目)01 原理对于服务器上的某个文件,我们要并发下载到本地,很容易想到,应该将文件分成多个部分,然后开多个 goroutine 并发地去下载,最后将这多个部分合并成一个文件,实现并发下载的目的。现在的问题是,服务器上的一个文件,我们怎么做到分成多个呢?这需要 HTTP 协议相关知识了。HTTP转载 2022-02-24 22:57:57 · 581 阅读 · 0 评论 -
【Golang】SQL和Gendry的实践
导入对应的包// 安装$ go get github.com/go-sql-driver/mysql// 导入import ( "database/sql" _ "thirdpkg/go-sql-driver/mysql")初始化mysql客户端// 打开数据库,格式是⽤户名:密码@协议/数据库名称?编码⽅式db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8"i原创 2021-11-22 20:32:31 · 427 阅读 · 0 评论 -
【GO+Iris】Iris框架初识
前言关于Iris安装IrisHostHTTP/2和安全任意iris.Runnerhost配置多个主机优雅的关闭带有TLS地自动公共域名app.Run的第二个参数使用配置自定义值从Context中访问配置Iris 进阶学习教程:关于IrisIris是一个通过GO编写的快速的,简单的,但是功能齐全和非常有效率的web框架Iris为你下一个网站或者API提供一个精美的、使用简单的基础Iris为使用者提供了一个完整且体面地支持安装IrisIris是一个跨平台的软件//安装//go get原创 2021-11-16 00:58:30 · 5913 阅读 · 0 评论 -
【GO+Iris】实战-高并发抽奖系统
前言一、场景二、抽奖系统业务难点三、抽奖系统经济挑战四、技术选型 GO vs PHP/JAVA五、内容概览 && 前置知识前置知识开发环境学习建议六、抽奖活动Demo年会抽奖程序-annualMeeting初级版本TODO...待续一、场景二、抽奖系统业务难点需求复杂又多变奖品类型和概率设置如何公平的抽奖、安全的发奖三、抽奖系统经济挑战网络并发编程、数据读写的并发安全性问题高效的抽奖和发奖,提高并发和性能系统优化,怎么吧redis更好的利用起来四、技术选型 GO原创 2021-11-16 00:44:31 · 2090 阅读 · 0 评论 -
【Gin-Vue-Admin】后台管理系统脚手架
Gin-Vue-AdminGIN-VUE-ADMIN 是一个基于 vue 和 gin 开发的全栈前后端分离的后台管理系统,拥有 jwt 鉴权,动态路由,动态菜单,casbin 鉴权,表单生成器,代码生成器等功能,新版本增加了从数据库表一键创建前后端 curd 代码功能,方便大家从老系统迁移,大大减少了开发工作量,真正做到 5 分钟一套基础业务,让大家把更多时间专注在复杂业务开发上。项目地址演示 demo: http://demo.gin-vue-admin.com (如提示备案中请使用备用站点)备.转载 2021-11-14 01:24:56 · 1347 阅读 · 0 评论 -
【GO开发脚手架】教你搭建常用的go后端脚手架
基本架构bluebell├─ config.yaml #配置文件├─ controllers #服务入口 负责处理路由 ,参数校验 请求转发├─ dao #负责数据与存储相关功能│ ├─ mysql │ │ └─ mysql.go│ └─ redis│ └─ redis.go├─ go.mod├─ go.sum├─ logger #日志│ └─ logger.go├─ logic #逻辑层 负责业务逻辑├─ main.go #主文件├─ models #模型原创 2021-11-14 01:21:21 · 1682 阅读 · 0 评论 -
【GIN+GO】实战-博客
转自: https://segmentfault.com/a/1190000013297625本系列示例代码go-gin-example本系列目录连载一 Golang介绍与环境安装连载二 搭建Blog API’s(一)连载三 搭建Blog API’s(二)连载四 搭建Blog API’s(三)连载五 使用JWT进行身份校验连载六 编写一个简单的文件日志连载七 Golang优雅重启HTTP服务连载八 为它加上Swagger连载九 将Golang应用部署到Docker连载十 定制转载 2021-11-14 01:19:29 · 128 阅读 · 0 评论 -
【GO+VUE】实战-招新管理系统
文章目录招新前后端分离管理系统(简易)技术介绍项目介绍项目步骤1.设计数据库2.分析需求3.前端分析4.后端分析后端路由设计跨域的问题项目部署1.前端部署2.后端部署3.跨域(http转http)项目总结招新前后端分离管理系统(简易)技术介绍前端:vue 框架—>vue-admin-template | element-ui后端:go 框架—>gin数据库: mysql项目介绍这个就是一个我学习g原创 2021-11-14 01:16:21 · 4603 阅读 · 2 评论 -
【GO+Gin+Vue】实践-权限管理系统
GO项目实践一(gin + vue)基于go-gin + vue开发的简单权限管理系统1. 基本介绍之前一直做Java开发,Go语言语法看过两三次,但是没动手写点东西总觉得不对劲,于是有了这个项目,当是练练手。1.1 基本功能这个系统主要实现的是一个简单的权限管理系统,主要功能如下:登录认证用户管理角色管理菜单管理客户端管理API管理基于以上功能实现前端页面菜单和按钮级权限,后端API权限校验1.2 系统预览用户管理角色管理菜单管理API管理原创 2021-11-12 18:24:13 · 4691 阅读 · 2 评论 -
【Go进阶】Dockerfile文件详解
Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。 Dockerfile 是一个文本文档,其中包含了用户创建镜像的所有命令和说明。一、 变量变量用 KaTeX parse error: Expected group after '_' at position 24: …\_name_** 或者 **_̲{variable_name} 表示${variable:-word}表示如果variable设置,则结果将是该值。如果variable未设置,word则将是结果。${v..转载 2021-08-25 22:56:01 · 1124 阅读 · 0 评论 -
【Go进阶】Go Web应用如何使用Docker部署
本文介绍了如何使用Docker以及Docker Compose部署我们的 Go Web 程序。为什么需要Docker?使用docker的主要目标是容器化。也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机。想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很多的依赖环境或包,甚至对依赖的具体版本都有严格的要求,当开发过程完成后,你希望将应用程序部署到web服务器。这个时候你必须确保所有依赖项都安装正确并且版本也完全相同,否则应用程序可能会崩溃并无法运行。如果你想在.原创 2021-08-25 01:13:55 · 367 阅读 · 0 评论 -
【Go进阶】函数式选项模式
本文主要介绍了Go语言中函数式选项模式及该设计模式在实际编程中的应用。为什么需要函数式选项模式?最近看go-micro/options.go源码的时候,发现了一段关于服务注册的代码如下:type Options struct { Broker broker.Broker Cmd cmd.Cmd Client client.Client Server server.Server Registry registry.Registry Transport t..原创 2021-08-21 12:54:22 · 214 阅读 · 0 评论 -
【Go进阶】Go中的单例模式详述
在过去的几年中,Go语言的发展是惊人的,并且吸引了很多由其他语言(Python、PHP、Ruby)转向Go语言的跨语言学习者。 Go语言太容易实现并发了,以至于它在很多地方被不正确的使用了。Go语言中的单例模式对于被Go语言天生支持并发的特性吸引来的跨语言学习者来说,我觉着掌握Go语言的语法并不是最难的,最难的是突破既有的思维定势,真正理解并发和使用并发来解决实际问题。Go语言太容易实现并发了,以至于它在很多地方被不正确的使用了。常见的错误有一些错误是很常见的,比如不考虑并发安全的单例模式。..原创 2021-08-21 11:56:27 · 411 阅读 · 11 评论 -
【Go进阶】如何让你Go项目中日志清晰有趣-Zap日志库
本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档。在Go语言项目中使用Zap日志库在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能:能够将事件记录到文件中,而不是应用程序控制台。日志切割-能够根据文件大小、时间或间隔等来切割日志文件。支持不同的日志级别。例如INFO,DEBUG,ERROR等。能够打印基本信息,如调用文件/函数名和行号,日志时间等。默认的Go Lo..原创 2021-08-20 12:48:12 · 788 阅读 · 12 评论