如何以及为什么在 Go 中编写枚举

一个**枚举**(enum,**enumerator** 的缩写),是一组命名的常量值。枚举是一个强大 的工具,让开发者可以创建复杂的常量集,而这些常量集有着有用的名称和简单且唯一的取值。 *在我们走远之前,我想提一下[我最近启动了 Go Mastery,一门动手的 Golang 课程](https://qvault.io/go-mastery-course/)。如果想要了解更多关于 Go 的信息,请尝试下该课程,现在让我们回到枚举上面。* ## 语法示例 在一个常量声明中,[...阅读全文

Go语言中文网 2021-09-28 00:15:55 dust347

如何在 Go 中组织项目结构

GCTT 译者注:在翻译这篇文章之前,我自己其实对 Bob 大叔的 Clean Architecture 也做过一些研究,在项目中实践之后,也确确实实体验到了分层的魅力。在层与层之间将依赖进行隔离,各个层只关注自己本身的逻辑,所以能让开发者只关注本层的业务逻辑,也更容易进行单元测试,无形中就提高了你代码的质量和可阅读性。我觉得如果你对自己的代码有追求,就一定要去学习一下 Clean Architecture。 当然另一方面,Clean Architecture 也不是银弹,在复杂的项目中确...阅读全文

Go语言中文网 2021-09-28 00:10:04 h1z3y3

深入剖析 Golang Pprof 标签

Polar Signals 提供的持续分析工具可以和任何格式的 pprof 分析适配,Go 深度集成了 [pprof](https://github.com/google/pprof) 甚至支持了它的`标签`特性。 然而,自从我们发布了我们的 [持续分析产品](https://www.polarsignals.com/blog/posts/2021/02/09/announcing-polar-signals-continuous-profiler/) 之后,收到了很多工程师的反馈,发现许...阅读全文

Go语言中文网 2021-09-27 23:58:39 h1z3y3

Go 服务中 HTTP 请求的生命周期

Go 语言对于编写 HTTP 服务来说是一个常见且非常合适的工具。这篇博文通过一个 Go 服务来探讨一个典型 HTTP 请求的路由,涉及路由,中间件以及比如并发之类的相关问题。 为了有具体的代码可以参考,让我们先从这段简单的服务代码开始(来自于 [https://gobyexample.com/http-servers](https://gobyexample.com/http-servers)) ```go package main import ( "fmt" "...阅读全文

Go语言中文网 2021-09-27 23:49:22 dust347

Go:用 kqueue 实现一个简单的 TCP Server

## 介绍 在 [非阻塞 I/O 超简明介绍](https://dev.to/frosnerd/explain-non-blocking-i-o-like-i-m-five-2a5f) 中,我们已经讨论过现代 Web 服务器可以处理大量并发请求,这得益于现代操作系统内核内置的事件通知机制。受 Linux epoll [ [文档](https://man7.org/linux/man-pages/man7/epoll.7.html) ]启发,FreeBSD 发明了 kqueue [ [论文]...阅读全文

Go语言中文网 2021-09-27 23:40:29 h1z3y3

WgcloudAgent.go:147: 主机监控信息上报server错误: Post "http://localhost:9999/wgcloud/agentGo/minTask": dial tcp [::1]:9999: connecte

WGCLOUD这个错误原因是,agent主机ping不通server主机的ip,或连不上server主机的9999端口导致的如果是连不上server的9999,可能是server主机防火墙没有开启9999端口,给其他主机访问​阅读全文

Go语言中文网 2021-09-26 11:00:45 tianshiyeben

Go:程序如何恢复(recover)?

![由 Renee French 创作的原始 Go Gopher 作品,为“ Go 的旅程”创建插图。](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20201002-Go-How-Does-a-Program-Recover/1_4zRau44piN5HjUnTnJsMOw.png) 当程序无法适当处理错误时,比如无效的内存访问,Go 中的 panic 就会被触发。如果错误是意料之外,且没有其他方式处...阅读全文

Go语言中文网 2021-09-24 10:22:16 dust347

Go 中优化字符串的比较操作

![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20200912-Optimizing-String-Comparisons-in-Go/00.jpeg) 你想让你的 Go 程序运行得更快些吗?优化下 Go 程序中的字符串比较可以减少程序的响应时间,以及增强它的可扩展性。对比两个字符串来检查它们是否相等需要一定的处理能力,并不是所有的比较操作都是相同的。 在之前的一篇文章中,我们研究了 [Go...阅读全文

Go语言中文网 2021-09-24 09:56:21 lxbwolf

Go:多错误管理

![由Renee French创作的原始Go Gopher制作的“ Go的旅程”插图。](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20200901-Go-Multiple-Errors-Management/Illustration.png) Go 语言中的错误(error)管理总是能引起争论,同时,在关于使用 Go 语言的时候,开发者面对最大的挑战的[年度调查](https://blog.gola...阅读全文

Go语言中文网 2021-09-24 09:52:10 dust347

json 二 开源库gjson的用法

二 开源库gjson用过Go语言的都知道,在项目中Go语言json包肯定是不足以满足千变万化的需求的。Go语言中Unmarshal函数会把整个JSON字符串解析成Go语言结构体实例,如果这个实例很大,JSON很长,我们只需要用到这个实例中的一个属性,那么这个转换就浪费了很多性能。所以,在项目中大家一般会使用第三方JSON包。2.1 gjsongjson是Github上很受欢迎的Go语言JSON开源库,可以通过级联方式直接获取下级某个属性,可以获取某个JSON数组的第一个元素,最后一个元素,元素个...阅读全文

Go语言中文网 2021-09-23 16:47:17 xiaojun1195

Golang发送钉钉机器人消息

## 推荐背景 作为新生代农民工,日常搬砖时间分配基本分为写Bug、Debug、Battle、~~摸鱼、喝水、上厕所~~...。除了这些,作为业务一线的民工们还会偶尔会收到产品、运营姐姐妹妹的数据统计需求,她的确要这个数有用,并且只有你有,有每天都要的,有每周要的,有不定期要的。可能也就几个SQL的事,做后台不值得,不做后台呢也不值得。一块砖搬一次两次可以,再多可就不行了,不然配不上==新生代==这三个字。 那有没有一个实现简单又使用方便的工具呢,没有?那想办法搞一个。 ###...阅读全文

Go语言中文网 2021-09-23 09:53:15 blinkbean

用Go轻松完成一个SAGA分布式事务,保姆级教程(修订版)

银行跨行转账业务是一个典型分布式事务场景,假设A需要跨行转账给B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的ACID,只能够通过分布式事务来解决。 ## 分布式事务 分布式事务在分布式环境下,为了满足可用性、性能与降级服务的需要,降低一致性与隔离性的要求,一方面遵循 BASE 理论: - 基本业务可用性(Basic Availability) - 柔性状态(Soft state) - 最终一致性(Eventual consistency) 另一方...阅读全文

Go语言中文网 2021-09-21 22:30:16 yedf

GfEasy:一款设计完数据库就开发完成的系统,摸鱼神器

低代码开发、急速CRUD降低学习成本,只要会设计数据库就可玩转本系统遇到功能修改,往往只需一两行代码即可实现留出更多的时间去摸鱼神器开源、基于MIT协议喜欢的话,欢迎给个starhttps://github.com/jasonLaw1015/GfEasy或者https://gitee.com/jasonlaw1015/GfEasy​​一、开发环境准备1.1、克隆仓库&配置开发环境打开https://github.com/jasonLaw1015/GfEasy或者https://gitee.com...阅读全文

Go语言中文网 2021-09-21 12:54:28 jasonLaw1015

【生产BUG】一个生产Bug到GORM框架分析

目录:1.Bug背景介绍2.Bug分析过程   2.1. 百度搜索解决方案   2.2. 根据关键错误信息分析源代码:database/sql(Golang版本:1.14.3)   2.3. 分析gorm的Begin/Commit/Rollback/Find源代码(Golang版本:1.14.3)   2.4. 分析业务代码调用Gorm的逻辑关系3.Gorm/database/mysql架构分析  3.1. Gorm/database/mysql分层架构  3.2. Gorm/database/...阅读全文

Go语言中文网 2021-09-17 11:17:23 ltp5343

用Go轻松完成一个XA分布式事务,保姆级教程

### 事务 某些业务要求,一系列操作必须全部执行,而不能仅执行一部分。例如,一个转账操作: ``` -- 从id=1的账户给id=2的账户转账100元 -- 第一步:将id=1的A账户余额减去100 UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- 第二步:将id=2的B账户余额加上100 UPDATE accounts SET balance = balance + 100 WHERE id = 2; ...阅读全文

Go语言中文网 2021-09-14 09:33:53 yedf