编程语言:Go
Write tests smarter, not harder
Chasing what is measurable, might actually be harming achieving the goal of higher quality.
一种基于字典传递的Go泛型翻译方法
Go 编程语言自2009年发布以来,其设计和改进的重点一直在于如何帮助开发者简单、安全和高效地开发程序。最近的 Go 版本添加了泛型,可以让 Go开发者安全快速地重用代码,Go开发者认为这是Go语言此前最关键缺陷,也是大家期待已久的特性。
Go语言躲坑经验总结
本文收集一些使用Go开发过程中非常容易踩坑的case,所有的case都有具体的代码示例,以及针对的代码修复方法,以避免大家再次踩坑。通常这些坑的特点就是代码正常能编译,但运行结果不及预期或是引入内存漏洞的风险。
基于Go构建滴滴核心业务平台的实践
- Golang 目前在滴滴业务应用的情况,以及规模;
- 滴滴对 Go 服务进行服务治理的一些经验;
- 两个在业务中遇到的问题;
- 滴滴为 Go 社区贡献的开源轮子;
快速搭建Go JSON-RPC Server
jsonrpc是无状态、轻量级的远程过程调用协议,传递数据格式为JSON。GO 官方提供rpc包和jsonrpc包,与rpc包不同的是,jsonrpc可以实现跨平台通信。本文将介绍如何用Go快速搭建一个jsonrpc Server,用PHP实现jsonrpc client进行验证,同时也记录下验证过程中出现的坑。
贝壳找房小程序从PHP到Golang的跃迁之路
小程序目前依赖众多下层服务,一个普通的小区接口依赖的下层API达到11个之多。在阻塞IO的模式下,所有等待延迟串行叠加,非常容易给前端造成比较高的后台等待,影响用户体验。特别是遇到个别服务的部分请求出现透传DB,SQL效率不高时,就更会雪上加霜,499突增,威胁到服务稳定性。
Go设计模式——观察者模式
观察者模式(Observer Pattern)是一种发布/订阅模式,定义了对象间的一种一对多的依赖关系,一个主题对象(Subject)持有若干个依赖其状态的观察者对象(Observer),而观察者模式则允许多个观察者对象自动接收主题对象的状态变更事件,以各自处置。
Shrink Your TinyGo WebAssembly Modules by 60%
With WebAssembly, small binary sizes are good. We at Fermyon like the idea of small microservices for the cloud, but even if you are building for the browser, shaving off a few kilobytes of data can speed up your app.
Go 语言官方依赖注入工具 Wire 使用指北
接触 Golang 有一段时间了,发现 Golang 同样需要类似 Java 中 Spring 一样的依赖注入框架。如果项目规模比较小,是否有依赖注入框架问题不大,但当项目变大之后,有一个合适的依赖注入框架是十分必要的。通过调研,了解到 Golang 中常用的依赖注入工具主要有 Inject 、Dig 等。但是今天主要介绍的是 Go 团队开发的 Wire,一个编译期实现依赖注入的工具。
600+服务模块,1万+POD数量,作业帮从PHP迁移至Go实战总结
作业帮初期因业务快速发展,服务端采用 PHP 语言作为主要开发语言,很好支撑了业务快速的迭代发展。
Leveraging Go Worker Pools to Scale Server-side Data Sharing
How Shopify scaled our Server Pixels service to increase its event processing performance by 170%.
Golang后台单元测试实践
本文介绍了单测的必要性与时机;测试框架与mock/stub;模式化的实践流程;对日常编码设计的反哺。
ngo:go语言开发利器
网易传媒在2021年的时候就开始尝试将线上的一些核心集群使用Go语言进行重构,笔者有幸主导了本次Go语言重构,在本次重构中,为了减少各业务不必要的调研时间,我们成立了一个攻坚小组,就业务用到的各种依赖进行了统一调研、封装、测试。
Golang 中反射的应用与理解
当程序运行时, 我们获取到一个 interface 变量, 程序应该如何知道当前变量的类型,和当前变量的值呢?
当然我们可以有预先定义好的指定类型, 但是如果有一个场景是我们需要编写一个函数,能够处理一类共性逻辑的场景,但是输入类型很多,或者根本不知道接收参数的类型是什么,或者可能是没约定好;也可能是传入的类型很多,这些类型并不能统一表示。这时反射就会用的上了,典型的例子如:json.Marshal。
再比如说有时候需要根据某些条件决定调用哪个函数,比如根据用户的输入来决定。这时就需要对函数和函数的参数进行反射,在运行期间动态地执行函数。
作业帮GO应用框架实践
作业帮初期因业务快速发展,服务端采用PHP语言作为主要开发语言,很好支撑了业务快速的迭代发展。但随着业务发展,以ODP为代表的PHP服务端技术栈遇到了一些问题,主要是:
·微服务架构支持欠缺:ODP通过PHPLIB耦合服务,类单体架构,服务间边界模糊,框架全局部署且缺乏现代包管理工具。
·性能/成本瓶颈:PHP缺乏线程/协程支持,资源使用率高,业务成本大,在高并发、高性能的部分场景与GO有一定差距。
·云原生适配不足:云原生带来的技术红利,比如容器化、服务治理、devops、服务观测,PHP的适配度低,比如FPM fastcgi在原生mesh的支持上及CD上过多耦合。
所以作业帮选择了GO作为主推的服务端开发语言来替代PHP。作业帮GO语言框架zgin是基于gin衍生而来,是面向web服务的开发框架,提供了开箱即用的常用组件和功能,侧重通用性和稳定性,兼顾性能和时延,构建了符合公司业务场景的生态体系。
Golang依赖注入提升开发效率!
依赖注入并不是java独有的,也不是web框架独有的,本文用通俗易懂的语言讲解什么是依赖注入,为什么需要依赖注入,以及go语言如何使用依赖注入来提升开发效率。