Go 开发者进阶周刊(Jan week 1)

本期含 Go 量

1

语言学习 x9

2

工程实践 x8

3

生态拓展 x4

4

开源项目 x5

阅读说明

本周刊每周五发布,同步国内外 Go 开发者在一周内的最新鲜成果和最前沿方向,作为订阅者提升和进阶的学习手册。由于微信不支持外链,本文显示资讯摘要,具体每篇文章链接可通过点击文末「阅读原文」全部查看。

语言学习

Golang编程技巧

1.Golang 实现依赖注入

依赖注入是软件工程中经常使用到的一种技术,它提供了一种控制反转的机制,把控制权利交给了调用方。调用方来决定使用哪些参数,哪些对象来进行具体的业务逻辑。

它有几个好处:
1 它让调用方更灵活。
2 大量减少定义类型的代码量
3 增加代码的可用性,因为调用方只需要关注它需要的参数,不需要顾及它不需要的参数了。

2.理解 Golang 中函数调用的原理

函数是 Go 语言中的一等公民,理解和掌握函数的调用过程是深入学习 Golang 时无法跳过的步骤,这里会介绍 Go 语言中函数调用的过程和实现原理并与 C 语言中函数执行的过程进行对比,同时对参数传递的原理进行剖析,让读者能够清楚地知道 Go 在函数的执行过程中究竟都做了哪些工作。

3.Go 中 Linux管道

管道是Unix哲学的基石,它允许通过组合仅做一件事情的程序来处理更复杂的问题。

文中将实现一个可以在Unix管道中使用的简单Golang程序,使用的所有代码都在github.com/napicella/go-linux-pipes上。

4.图解Go里面的sync.Map了解编程语言核心实现源码

在大多数语言中原始map都不是一个线程安全的数据结构,那如果要在多个线程或者goroutine中对线程进行更改就需要加锁,除了加1个大锁,不同的语言还有不同的优化方式, 像在java和go这种语言其实都采用的是链表法来进行map的实现,本文也主要分析这种场景。

5.【译】Go 语言实践:编写可维护的程序的建议

本文为 Heptio 资深工程师、著名 Go 语言专家 David Cheney 关于 Go 语言实践的英文分享。

6.Go 系列教程

Go是一种编程语言,旨在快速编译,简化编程和在生产中高效执行。本教程将指导您在Ubuntu 18.04上通过命令行使用Go安装和配置编程工作区。

7. Go modules:最小版本选择

每个依赖管理解决方案都必须解决选择依赖项版本的问题。当前存在的许多版本选择算法都试图识别任何依赖项的“最新最大(latest greatest)”版本。如果您认为语义版本控制(sematic versioning)将被正确应用并且这种社会契约得到遵守,那么这是有道理的。在这样的情况下,依赖项的“最新最大”版本应该是最稳定和安全的版本,并且应与较早版本具有向后兼容性。至少在相同的主版本(major verion)依赖树中是如此。

Go决定采用其他方法,Russ Cox花费了大量时间和精力撰写文章和演讲探讨Go团队的版本选择方法,即最小版本选择或MVS(Minimal Version Selection)。从本质上讲,Go团队相信MVS为Go程序实现痴线持久的和可重复的构建提供了最佳的方案。建议大家阅读这篇文章以了解Go团队为什么相信这一点。

在本文中,作者将尽最大努力解释MVS语义,展示一个实际的Go语言示例,并实际使用MVS算法。

8.如何正确的开始用 Go 编程

本文会演示简单的Go软件包的开发过程,并介绍了go命令行工具,这是我们获取,构建和安装Go软件包和命令的标准方法。

go工具要求你以特定方式组织代码,文中会介绍Go安装启动和运行的最简单方法。

9. Golang内存分配

Go语言内置运行时(就是runtime),不同于传统的内存分配方式,go为自主管理,最开始是基于tcmalloc架构,后面逐步迭新。自主管理可实现更好的内存使用模式,如内存池、预分配等,从而避免了系统调用所带来的性能问题。

如果你认为结合 Goroutines 去处理时间和计数器很简单的话,那你就错了,这里有提到的一些与 time.Timer 相关的问题或 bug:

  • time: Timer.Reset is not possible to use correctly #14038

  • time: Timer.C can still trigger even after Timer.Reset is called #11513

  • time: document proper usage of Timer.Stop #14383

工程实践

Go的项目应用实践

1.使用 Go 优化我们的接口

整体介绍了下当接口耗时较长的时候的一般处理方案。

2.为什么 MongoDB 使用 B 树

MySQL 和 MongoDB 两种不同类型的数据库使用了相似却不同的数据结构,为什么 MySQL 选择使用 B+ 树而 MongoDB 使用 B 树呢?


3.利用 CPU cache 特性优化Go程序

如下Go语言伪代码,开启两个协程,分别对一个结构体变量中的两个相邻的数据成员进行n次原子自增操作,当打开_ [56]byte这个看似多余的代码后,程序运行速度加快了一倍!你知道是为什么吗?

4.清晰架构(Clean Architecture)的Go微服务: 设计原则

作者最近写了一个Go微服务应用程序,这个程序的设计来自三个灵感:

  • 清晰架构"Clean Architecture"and SOLID (面向对象设计)设计 原则

  • Spring的容器技术(Spring’s application context)

  • Go的简洁设计特别是 Go的面向对象的设计

5. XSS简介以及如何保护你的客户(Go版本)

6.Go依赖注入工具 wire 与 dig 对比

7.我们为什么用GO语言来做区块链? 

在区块链公链的开发圈子里,我们找到了一些流行的编程语言,有C++、Golang、Python和最近新起的Rust等等。老一代的公链,比如Bitcoin,Litcoin一般使用C/C++较多(我们看看那个时间,当时Go还没起来呢),新一代的公链比如以太坊,联盟链翘楚超级账本,开始较多使用Go语言,当然我们看到Rust的发展势头也很猛,近两年的很多公链比如波卡,Grin都开始采用Rust语言开发了。

8.Golang 错误处理最佳实践

生态拓展

云原生等 Go 生态体系

1.微服务架构的 10个 最佳实践

微服务架构是将软件系统分解为自主模块,自主模块可以独立部署,通过轻量级的、与语言无关的方式进行通信,共同实现业务目标。

2.GOMAXPROCS 与容器的相处之道

众所周知,GOMAXPROCS 是 Golang 提供的非常重要的一个环境变量设定。通过设定 GOMAXPROCS,用户可以调整 Runtime Scheduler 中 Processor(简称P)的数量。由于每个系统线程,必须要绑定 P 才能真正地进行执行。所以 P 的数量会很大程度上影响 Golang Runtime 的并发表现。GOMAXPROCS 在目前版本(1.12)的默认值是 CPU 核数,而以 Docker 为代表的容器虚拟化技术,会通过 cgroup 等技术对 CPU 资源进行隔离。以 Kubernetes 为代表的基于容器虚拟化实现的资源管理系统,也支持这样的特性。这类技术对 CPU 的隔离限制,是否能够影响到 Golang 中的 GOMAXPROCS,进而影响到 Golang Runtime 的并发表现呢?这是一个值得探索的话题,本文从 Docker 和 Kubernetes 对 CPU 资源的限制出发,利用实验的方式验证了这一问题,并且给出了一些个人看法。

3. 使用多阶段构建的精益Golang Docker镜像

4. 您需要了解的有关Kubernetes服务质量(QoS)

服务质量(QoS)类是Kubernetes的概念,它确定Pod的调度和驱逐优先级。Kubernetes调度程序使用QoS类来做出有关将Pod调度到节点上的决策。 


开源项目

社区新涌现的开源成果

Gos:GO MODULE解决方案

tamago:为 ARM Socs 打造的裸金属框架

sqlstats:为 Prometheus 准备的 sql.DBStates 收集库

go-term-markdown:Go Markdown终端渲染库

sqlite:无需CGO的Go SQLite连接库  

彩 蛋

活动与招聘

  • 01.04 Gopher Meetup Plus深圳站

    活动 报名

    Asta——Go在工业领域的应用实践

    腾讯——Go性能优化之路

    广发证券——Go与极限性能实践

    OPPO——云平台存储系统架构设计与容器化实践

    平安科技——从面试题目到Golang汇编

    腾讯——如何向Go官方提交代码

    华为云——云原生边缘计算平台的Golang实践

【北京】【商汤科技招聘】Golang开发实习生 详情

【杭州】【蚂蚁金服】蚂蚁金服研发效能团队招人啦!

【深圳】【腾讯广告】招聘后台开发工程师 详情

【上海】【趣头条旗下米读小说】资深后端研发/架构师 详情

【武汉】【奇虎360】招聘资深golang工程师 详情

欢迎联系 GoCN

国内最具规模和生命力的 Go 开发者社区

演讲

成为 Gopher Meetup/Gopher China 讲师

投稿

展示个人/团队原创内容

聪明又努力的 Gophers,让我知道你“在看”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值