Go 进阶训练营 – Go 工程化实践一:工程项目结构
工程项目结构 序言 go工程的项目结构多种多样,不同的框架对应不同的结构,即使是同一个框架,也有可能出现不同的结构。我个人感觉目前go很年轻,处于百花齐放的时代。而不像java,早已形成业界标准,主流框架spring全家桶,你想要的它都有。基本不用纠结项目结构,只需照着来就行。这对刚从java转到go的同学造成很大的困扰,不知道怎么写符合业界标注,…
Golang 优雅实现责任链
前言 在微服务框架kratos中,通过中间件对请求进行扩展处理。有点像java里的servlet,也是用的责任链实现的,但实现方式很巧妙,这里详细说一下。 具体实现 处理顺序 ┌───────────────────┐ │MIDDLEWARE 1 │ │ ┌────────────────┐│ │ │MIDDLEWARE 2 ││ │ │ ┌───…
Go 进阶训练营 – 错误处理二:错误定义与处理
error type: 错误定义与判断 Sentinel Error 哨兵错误,就是定义一些包级别的错误变量,然后在调用的时候外部包可以直接对比变量进行判定,在标准库当中大量的使用了这种方式。例如下方 io 库中定义的错误。 // EOF is the error returned by Read when no more input is ava…
fmt.Println()和println()的区别
背景 在测试error.is时,发现一个奇怪的现象,同时使用fmt.Printf和println,输出顺序无法保证,也就是可能存在异步输出。 err := errors.New("standard error") myError := MyError{1, "my error"} if errors.Is(e…
Go 进阶训练营 – 错误处理一:最佳实践
同系列文章:Go 进阶训练营 Go error/panic VS java exception 和java相比,go的异常处理两极化,panic比exception更严重,java exception是线程级别的,而go的panic是进程级别,任意goroutine出现panic都会导致整个进程挂掉,更能提醒异常情况。error比exception…
《Go语言精进之路:从新手到高手的编程思想、方法和技巧1》10-12章笔记
第10条 使用iota实现枚举常量 Go的const语法提供了“隐式重复前一个非空表达式”的机制,来看下面的代码: 常量定义的后两行没有显式给予初始赋值,Go编译器将为其隐式使用第一行的表达式,这样上述定义等价于: iota是Go语言的一个预定义标识符,它表示的是const声明块(包括单行声明)中每个常量所处位置在块中的偏移值(从零开始)。 iot…
《Go语言精进之路:从新手到高手的编程思想、方法和技巧1》7-9章笔记
第7条 使用Go命名惯例对标识符进行命名 计算机科学中只有两件难事:缓存失效和命名。 ——Phil Karlton,Netscape架构师 Go语言的贡献者和布道师Dave Cheney给出了一个说法:“一个好笑话,如果你必须解释它,那就不好笑了。好的命名也类似。” 简单且一致;利用上下文辅助命名。 7.1 简单且一致 Go命名惯例选择了简洁命名+…
Gitlab CI/CD 实践六:统一管理 protocol buffer,API 大仓设计与实现
背景 目前公司采用 protocol buffer 作为 IDL,虽然可以根据 API 定义,轻松生成客户端和服务端的代码。但是对于跨项目的接口,会增加项目之间的耦合性。例如A服务对外提供了一个接口,B服务去调用。那么就需要根据A服务的proto文件,生成客户端代码,并拷贝给B。如果联调期间,A服务改动了该接口,还需重复前面的步骤,非常繁琐。 由此…
Go进阶训练营 – 微服务概览与治理四:多集群 & 多租户
同系列文章:Go 进阶训练营 为什么需要多集群? L0 服务,一旦故障影响巨大,所以需要保障高可用。 单一集群中,多个节点保证可用性,一般采用 N+2 来冗余节点。 N 通过压测得出 出现集群级别的问题,例如redis集群出问题了,整个集群的服务都受影响,所以需要多集群来保障可用性。每个集群独占缓存,带来更好的性能和冗余。 部署到多个机房,避免单机…
Go进阶训练营 – 微服务概览与治理三:gRPC & 服务发现
同系列文章:Go 进阶训练营 服务调用:gRPC 什么是gRPC? A high-performance, open-source universal RPC framework。 语言中立,公司里可能存在不同语言的服务需要交互。 统一采用gRPC作为服务之间的通信协议,可能存在其他性能更好的解决方案,但不要过早关注性能问题,先标准化更重要。 轻量…