GO项目实战 — Gorm格式化时间字段

theme: channing-cyan highlight: agategoshop开源项目的更新 在使用 gorm 查询时,如果未对时间字段进行处理,结构体内的字段类型咱们使用的是 time.Time : type Model struct { ID int64 `json:"id" gorm:"primary_key"` Created...

Go 天生适合分布式微服务?先醒醒,不搞定全链路日志追踪,查BUG时能让你崩溃

我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。 微服务为什么要搞日志链路追踪现在微服务架构盛行,很多以前的单体应用服务都被拆成了多个分布式的微服务,以解决应用系统发展壮大后的开发周期长、难以扩展、故障隔离等挑战。 不过技术领域有个谚语叫—没有银弹,这句话的意思其实跟现实生活中任何事都有利和弊两面一样,意思是告诉我们不要寄希望于用一个解决方案解决所有问题,引入...

云原生备份恢复工具Velero二开实战

前言Velero(https://velero.io)(可以提供备份和还原 Kubernetes 集群资源和持久卷的能力,你可以在公有云或本地搭建的私有云环境安装 Velero,可以为你提供以下能力: 备份集群数据,并在集群故障的情况下进行还原将集群资源迁移到其他集群将生产集群复制到开发和测试集群 对于其中一些自定义控制器,以及符合特定业务需要进行二次开发,经测试后可提交pr...

一文搞懂Go语言Context

0 前置知识sync.WaitGroupsync.WaitGroup是等待一组协程结束。它实现了一个类似任务队列的结构,可以向队列中加入任务,任务完成后就把任务从队列中移除,如果队列中的任务没有全部完成,队列就会触发阻塞以阻止程序继续运行。 sync.WaitGroup只有3个方法,Add(),Done(),Wait() 。 其中Done()是Add(-1)的别名,使用Add(...

逍遥游~1: ants是如何实现一个协程池的

概要Go的协程非常轻量,但是在超高并发场景,每个请求创建一个协程也是低效的,一个简单的思想就是协程池。另一种路径为事件驱动,例如字节跳动的HTTP框架Hertz。它使用字节跳动自研高性能网络库 Netpoll,可以简单理解为网络编程中常用的I/O多路复用,例如select和epoll。 需求分析阅读源码也不能忽略独立思考和需求分析,也就是如果需要独立实现一个协程池,我们需要实现...

Golang 小芝士之 “omitempty”

在尝试将结构体序列化为 Json 时,你可能会遇到 “omitempty” 标记,本小记就来浅看一下它如何起作用。 先上结论 基本类型的默认值会被 omit,除了数组。指针类型为 nil 时会被 omit。Talk is cheap. Show me the code.```package main import ( “encoding/json” “errors” ...

实现一个Prometheus exporter

Prometheus 官方和社区提供了非常多的exporter,涵盖数据库、中间件、OS、存储、硬件设备等,具体可查看exporters、exporterhub.io,通过这些 exporter 基本可以覆盖80%的监控需求,依然有小部分需要通过自定义脚本或者定制、修改社区exporter实现。本文我们将学习如何通过go编写一个简单的expoter用于暴露OS的负载。 要实现的...

golang 错误处理

带你熟悉golang error相关的知识. 0.引言 注:本文中的所有代码都在:https://github.com/driftingboy/advance-go/tree/master/master_go/erroruse 1.Error vs Exception1.1 Error本质 Error本质上是一个接口 type error interface{ Error...

Go1.19 那些事:国产芯片、内存模型等新特性,你知道多少?

大家好,我是煎鱼。 感觉时间过得很快,Go1.18 发布没太久,泛型还在风风火火,看了看上次的投票结果,绝大部分同学还没有在生产环境应用泛型。 这不,Go1.19 Beta1 已经正式发布了。今天就由煎鱼和大家围观《Go 1.19 Release Notes》中一些有意思的特性。 内存模型Go 的内存模型已被修订,以使 Go 与 C、C++、Java、JavaScript、Ru...