话题编程语言 › Go

编程语言:Go

关联话题: Golang

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语言如何使用依赖注入来提升开发效率。

Golang 中 map 探究

本文主要通过探究在golang 中map的数据结构及源码实现来学习和了解map的特性,共包含map的模型探究、存取、扩容等内容。

Go 生态下的字节跳动大规模微服务性能优化实践

Go 是一门很有特色的编程语言,已经被广泛应用到不少领域,随着使用场景的发展,一些性能相关的问题也开始逐渐暴露出来。本次分享将以字节跳动的性能优化工作为例,介绍基于 Go 生态的微服务体系下,分析系统性能、优化不同层次软件以提升运行性能、提高资源使用效率的一些实践和经验,会特别介绍在 Go 语言 SDK 侧的一些优化工作。

Go语言DDD实战初级篇-限界上下文

DDD分为战略设计和战术设计,战略设计就是划分子域和限界上下文的过程。领域划分为子域的通用划分形式是把领域划分为 核心子域、支撑子域、通用子域。我们在落地过程中常常会很容易划分出核心子域,一般设计mvp的时候mvp就是核心子域。但是领域划分出核心子域、支撑子域和通用子域之后就算划分完成了吗?

Go 1.18 的那些事——工作区、模糊测试、泛型

2022 年 3 月 15 日,Google 发布了万众瞩目的 Golang 1.18,带来了好几个重大的新特性,包括:

  1. 解决本地同时开发多个仓库带来的一些问题的工作区(Workspace)
  2. 能够自动探测代码分支,随机生成输入,并且检查代码是否会 panic 的模糊测试(Fuzzing Test)
  3. 众多开发者盼星星盼月亮终于等到的泛型支持。

本文将简单讲述这三个特性的相关内容。

Strategy Letter III: Let Me Go Back!

When you’re trying to get people to switch from a competitor to your product, you need to understand barriers to entry, and you need to understand them a lot better than you think, or people won’t switch and you’ll be waiting tables.

IOC-golang 的 AOP 原理与应用

AOP (面向切面编程)是一种编程设计思想,旨在通过拦截业务过程的切面,实现特定模块化的能力,降低业务逻辑之间的耦合度。

How We Halved Go Monorepo CI Build Time

Before 2021, Uber engineers would have to take quite a taxing journey to make a code change to the Go Monorepo. First, the engineer would make their changes on a local branch and put up a code revision to our internal code review system, Phabricator. Next, our infrastructure would see the request and initiate a number of validation jobs on our CI. Those jobs would run build and test validation using the Bazel™ build system, check the coverage, do some other work, and report back to the user a red light (i.e., tests failed or some other issues) or green light. Next, the user, after seeing the “green light,” would get their code reviewed and then initiate a “land” request to the Submit Queue. The queue, after receiving their request, would patch their changes on the latest HEAD of the main branch and re-run these associated builds and tests to make sure their change would be valid at the current state of the repository. If everything looked good, the changes would be pushed and the revision would be closed.

This sounds pretty easy, right? Make sure everything is green, reviewed, and then let the queue do the work to push your change!

Well… what if the change is to a fundamental and widely used library? All packages depending on the library will need to be validated, even though the change itself is only a few lines of code. This might slow down the “build and test” part. Validating this change could sometimes take several hours. Internally, we call such changes big changes.

Go 语言使用 MySQL 的常见故障分析和应对方法

很多同学在使用Go和数据库打交道的过程中,经常会遇到一些异常不知道为什么,本文从SQL连接池的原理进行分析,模拟了一些例子对异常的现象进行解读分析,并给出一些常见的应对手段,期望能帮助到大家。

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.124.0. UTC+08:00, 2024-04-25 09:00
浙ICP备14020137号-1 $访客地图$