每日新闻

每日新闻

GoCN每日新闻资讯
有问必答

有问必答

Go相关的问题,技术相关的问题
文章分享

文章分享

技术文章分享,让知识传播给更多的人
招聘应聘

招聘应聘

为Gopher服务的招聘应聘平台

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

dyq 发表了文章 • 0 个评论 • 1169 次浏览 • 2020-01-10 00:11 • 来自相关话题

语言学习(Golang 编程知识与技巧) ...查看全部

语言学习(Golang 编程知识与技巧)

1.Go编程语言规范

一份很详细的 Go 编程语言的参考手册。

2.Go网络文件传输

借助TCP完成文件的传输,基本思路如下:

  1. 发送方(客户端)向服务端发送文件名,服务端保存该文件名。
  2. 接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功。
  3. 发送方(客户端)收到消息后,开始向服务端发送文件数据。
  4. 接收方(服务端)读取文件内容,写入到之前保存好的文件中。

由于文件传输需要稳定可靠的连接,所以采用TCP方式完成网络文件传输功能。 

3.Go 编程: 对不起,你的 CPU 泄露了 

前段时间给后端几个服务配证书,试着用了一下 Cert-Manager 项目。 Github 几千 Star 的项目使用起来的确很方便,秒配域名免费证书。但是,运行了三天,机器CPU报警。赶紧去项目 issues 里搜,果真遇到类似不止一个, 第二天这个问题就修复了。

4.小改动,大提升:Go 标准库的一次优化 

Carlo Alberto Ferraris提交了一个对math/rand库中的lockedSource优化的pr(CL#191538),核心代码其实只有一行,却带来了相对的巨大的性能提升,让我们一起老看看这次的修改,学习一下代码的优化技巧,提高我们Go语言的底层优化经验。

5.高频 golang 服务接口超时排查&性能调优 

业务中超时抖动是大家平时比较容易遇到的一种技术问题,本文详细记录了一次线上容器中高频 go 服务超时的排查过程。本文可以给大家提供查服务业务超时问题的一些思路,理解为什么 go 服务会获取错 cpu 核数,了解获取宿主 cpu 核数会有多大影响并怎样最小成本避开。

6.Go语言学习Sync.Pool

假设我们需要频繁申请内存用于存放你的结构体, 而这个结构体本身是短命的, 可能这个请求过去你就不用了. 申请了这么多内存, 对于GC来说就是一种压力了. 针对这个问题, 如果我们能产生一个池子, 用于存放这些短命内存, 理想情况中下次请求来了, 直接从池子中拿就好了, 那么GC的时候我们直接清理池子就完事了, 算是一种GC的优化套路.

7.Go之for-range排坑指南

golang 常用的遍历方式,有两种:for 和 for-range。而 for-range 使用中有些坑常会遇到,今天我们一起来捋一捋。

8.Go语言使用TCP_NODELAY控制发包流量[译]

编写健壮且高性能的网络服务需要付出大量的努力。提高服务性能的方式有很多种,比如优化应用层的代码,更进一步,还可以看看垃圾回收器,操作系统,网络传输,以及部署我们服务的硬件是否有优化空间。

TCP/IP协议栈中的一些算法会影响到服务性能。本文将简单介绍其中的Nagle算法,与Nagle算法相关的socket选项TCP_NODELAY,以及在Go语言中如何使用它。

9.Golang context机制

Context通常被译作上下文,是一个比较抽象的概念。一般理解为程序单元的一个运行状态、现场、快照,而翻译中上下文又很好地诠释了其本质。

每个Goroutine在执行前,都要先知道程序当前的执行状态,通常将这些执行状态封装在一个Context变量中,传递给要执行的Goroutine中。上下文则几乎已经成为传递与请求同生存周期变量的标准方法。在网络变成下,当接收到一个网络请求Request,处理Request时,我们可能需要开启不同的Goroutine来获取数据和执行程序逻辑,即一个请求Request,会在多个Goroutine中处理。而这些Goroutine可能需要共享Request的一些信息;同时当Request被取消或者超时的时候,所有从这个Request创建的所有Goroutine也应该被结束。

10.《Go语言程序设计》读书笔记(六) 基于共享变量的并发

一个函数在线性程序中可以正确地工作。如果在并发的情况下,这个函数依然可以正确地工作的话,那么我们就说这个函数是并发安全的,并发安全的函数不需要额外的同步工作。我们可以把这个概念概括为一个特定类型的一些方法和操作函数,如果这个类型是并发安全的话,那么所有它的访问方法和操作就都是并发安全的。 


工程实践(Go的项目应用实践)

1.Go 的内存对齐和指针运算详解和实践

uintptr

在 Go 的源码中 uintptr 的定义如下:

/* uintptr is an integer type that is large enough to hold the bit pattern of any pointer.

从英文注释可以看出 uintptr是一个整形,它的大小能够容纳任何指针的位模式,它是无符号的,最大值为:18446744073709551615,怎么来的,int64最大值 * 2 +1

*/

type uintptr uintptr


unasfe

在 Go 中,unsafe 是一个包,内容也比较简短,但注释非常多,这个包主要是用来在一些底层编程中,让你能够操作内存地址计算,也就是说 Go 本身是不支持指针运算,但还是留了一个后门,而且 Go 也不建议研发人员直接使用 unsafe 包的方法,因为它绕过了 Go 的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。

2.eBay邓明:dubbo-go 中 metrics 的设计

最近因为要在 Apache/dubbo-go(以下简称 dubbo-go )里面实现类似的这个 metrics 功能,于是花了很多时间去了解现在 Dubbo 里面的 metrics 是怎么实现的。该部分,实际上是被放在一个独立的项目里面,即 metrics 。 

3.Go在MacOS创建一个自定义的命令行工具

使用 MacOS 做开发的朋友都知道,我们一般会使用 Homebrew 做软件包管理,经常会用到 brew install [soft] 来安装各种各样的命令行软件。今天通过一个百科查找的命令行工具(tellme)示例,我们来学习一下如何使用 Go 语言开发自己的命令行软件。

我们需要用到 cobra 这个 Go 模块来做命令行工具开发,这个开源库其实是对 Go 官方库 flag 的一个封装,可以简化获取参数的操作。

4.复杂分布式架构下的计算治理之路

在当前的复杂分布式架构环境下,服务治理已经大行其道。但目光往下一层,从上层 APP、Service,到底层计算引擎这一层面,却还是各个引擎各自为政,Client-Server 模式紧耦合满天飞的情况。如何做好“计算治理”,让复杂环境下各种类型的大量计算任务,都能更简洁、灵活、有序、可控的提交执行,和保障成功返回结果?计算中间件 Linkis 就是上述问题的最佳实践。

5.100 行写一个go的协程池(任务池)

go 的 goroutine 提供了一种较线程而言更廉价的方式处理并发场景, go 使用二级线程的模式, 将 goroutine 以 M:N 的形式复用到系统线程上, 节省了 cpu 调度的开销, 也避免了用户级线程(协程)进行系统调用时阻塞整个系统线程的问题。【1】

但 goroutine 太多仍会导致调度性能下降、GC 频繁、内存暴涨, 引发一系列问题。在面临这样的场景时, 限制 goroutine 的数量、重用 goroutine 显然很有价值。

本文正是针对上述情况而提供一种简单的解决方案, 编写一个协程池(任务池)来实现对 goroutine 的管控。


生态拓展(云原生等 Go 生态体系)

1.Kubernetes设计的4个原则 

今天我要带给大家的是2018年底,在西雅图举办的Kubecon的一场分享,来自谷歌K8s团队的工程师Saad Ali分享的《Kubernetes设计原则》。这场会议虽然已经过去一年多了,但是我觉得本会议的内容非常值得学习,我们大都知道K8s是如何工作的,但是本文带我们了解k8s背后的设计原则,以及为什么要这样设计。

2.分析并解决遗留应用迁移至Kubernetes后延迟增加的问题 

上周我们团队忙着将一个微服务迁移到中央平台上,包括CI/CD,Kubernetes运行时,metric和其他一些程序。这次实验是为了之后一个月里大概150个微服务的迁移作准备,所有这些服务支撑着西班牙在线市场的运营。

当我们将应用程序部署到Kubernetes上,并且将一些生产流量导入其中之后,事情开始有些不妙了。Kubernetes上的请求延迟比EC2上的高10倍左右。除非我们能找到解决方案,不然这会是微服务迁移的最大障碍,甚至可能彻底摧毁整个项目。

3.清晰架构(Clean Architecture)的Go微服务: 日志管理

良好的日志记录可以提供丰富的日志数据,便于在调试时发现问题,从而大大提高编码效率。 记录器提供的自动化信息越多越好,日志信息也需要以简洁的方式呈现,便于找到重要的数据。

4.Serverless Kubernetes 入门:对 Kubernetes 做减法

Serverless Kubernetes 是阿里云容器服务团队对未来 Kubernetes 演进方向的一种探索,通过对 Kubernetes 做减法,降低运维管理负担,简化集群管理,让 Kubernetes 从复杂到简单。

5.Kubernetes 容器平台安全实施方案

Kubernetes 容器平台的安全,牵涉到平台的各个层面:服务器,操作系统, Docker 运行环境,容器, Kubernetes 运行环境等。

容器运行在服务器上,服务器和操作系统安全应该是容器平台安全的第一道防线。关于主机和内核安全的资料和文档已经非常的丰富,不是我们这篇文档关注的重点,我们以下就其他几个层面展开。


开源项目(社区新涌现的开源成果)


jql用Go语言实现的JSON查询处理器

rqlite:Go 实现分布式 SQLite

 

彩蛋(活动与招聘)


01.04 Gopher Meetup Plus 深圳站活动 PPT下载

  • ž   Asta——Go在工业领域的应用实践
  • ž   腾讯——Go性能优化之路
  • ž   广发证券——Go与极限性能实践
  • ž   OPPO——云平台存储系统架构设计与容器化实践
  • ž   平安科技——从面试题目到Golang汇编
  • ž   腾讯——如何向Go官方提交代码
  • ž   华为云——KubeEdge:云原生边缘计算平台的Golang实践

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

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

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

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

 

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

dyq 发表了文章 • 0 个评论 • 1171 次浏览 • 2020-01-02 22:42 • 来自相关话题

语言学习(Golang 编程知识与技巧)1. ...查看全部

语言学习(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架构,后面逐步迭新。自主管理可实现更好的内存使用模式,如内存池、预分配等,从而避免了系统调用所带来的性能问题。

 

工程实践(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微服务应用程序,这个程序的设计来自三个灵感:

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 打造裸金属框架

sqlstatsPrometheus 准备的 sql.DBStates 收集

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

sqlite:无需CGO的Go SQLite连接库  


彩蛋(活动与招聘)

01.04 Gopher Meetup Plus 深圳站活动 报名

  • ž   Asta——Go在工业领域的应用实践
  • ž   腾讯——Go性能优化之路
  • ž   广发证券——Go与极限性能实践
  • ž   OPPO——云平台存储系统架构设计与容器化实践
  • ž   平安科技——从面试题目到Golang汇编
  • ž   腾讯——如何向Go官方提交代码
  • ž   华为云——KubeEdge:云原生边缘计算平台的Golang实践

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

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

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

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

 

Go 开发者进阶周刊(Dec week 4)

dyq 发表了文章 • 0 个评论 • 1069 次浏览 • 2019-12-26 20:09 • 来自相关话题

语言学习(Golang 编程知识与技巧)1. ...查看全部

语言学习(Golang 编程知识与技巧)

1.[译] Go反射的三个原则

反射从接口值变为反射对象

反射从反射对象变为接口值

要修改反射对象,该值必须是可设置的

2.你应该掌握的 Go 高级并发模式:计时器

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

  • time: Timer.Reset is not possible to use correctly #14038[1]
  • time: Timer.C can still trigger even after Timer.Reset is called #11513[2]
  • time: document proper usage of Timer.Stop #14383[3]

3.Go 内存分配器可视化指南

如果你想学习所有关于 Go 内存分配器的知识,那么这篇文章正适合你。

4.图解 Go 互斥锁 mutex 核心实现源码

读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的。

5.Go modules:最小版本选择

从本质上讲,Go团队相信MVS为Go程序实现痴线持久的和可重复的构建提供了最佳的方案。通过阅读本文可以了解Go团队为什么相信这一点。

6.Go 触发Panic与崩溃的情况  

对于标准的Go编译器,本文介绍了以下情况将导致运行时的 Panic(其中一些可能与编译器有关)以及如何恢复。

7.别告诉我这是真的?goroutine 可能使程序变慢

通常,让 Goroutines 更新全局变量不是一个好主意。记住 Go 谚语:不要通过共享内存进行通信,通过通信共享内存。

8.在Go中高效处理JSON

9.Go语言程序设计读书笔记(二)函数

10.go 类型检查之typecheck

类型检查指验证操作接收的是否为合适的类型数据以及赋值是否合乎类型要求。最自然的方式是认为检查发生在运行时,即当涉及到具体的数据值时,即动态类型检查(即运行时检查)。

11.Go Web 编程之请求

本文将学习如何从请求中获取信息。

工程实践(Go的项目应用实践)

1.将现有的Rest API迁移到Graphql

2.Java JIT vs Java AOT vs Go适用于短期的小型进程

普遍认为Java速度较慢(特别是在启动过程中)且占用内存,因此它不是临时服务实例(例如容器)的首选。本文比较了JVM对Java QuickSort实现的执行时间和内存消耗的影响,并将其与现代GraalVM Ahead-Of-Time(AOT)编译器以及Go中相同的 QuickSort实现生成的本机映像的执行进行了比较 。

3.使用Go开发百万WebSockets

本文是关于如何使用Go开发高负载WebSocket服务器的。

4.基于 Go 的协同系统深度实践

协同概念及应用
Go 服务端设计
主要技术点及解决方案

5.在Go中实现简洁架构

6.可汗学院尝试用Go构建后端服务

从 Python 迁移到 Go

7.Go实战布谷过滤器

8.Golang实现并发聊天室

整个项目涉及到的知识有:分支、循环、函数、map、结构体、并发编程、网络编程、select超时处理等等。项目虽然不大,但是涵盖了不少的基础知识,所以非常适合刚看完一本入门书、学完基础的人拿过来练手。

生态拓展(云原生等 Go 生态体系)

1.如何调试 K8s 中的 DNS 问题

本指南提供了有关如何系统解决Kubernetes集群中的DNS问题的分步教程。文中将使用 Hubble 识别和检查DNS问题以及设置监视,以便尽早定位DNS问题,甚至在事件发生之前也可以做出反应。

2.Go Serverless Functions

3.Thanos简介和实践

将介绍CNCF大杀器, Thanos + Prometheus TP组合(PS:并不是银弹)在Openstack与ceph集群中的概念和使用。

开源项目(社区新涌现的开源成果)

LBADD:一个实验性的分布式SQL数据库

Eris:处理跟踪和记录Go中的错误

Coca: 系统重构和系统分析工具箱

buf:一种新的Protobuf处理库

harmony:基于WebRTC的开源语音文字聊天室 

彩蛋(活动与招聘)

01.04 Gopher Meetup Plus 深圳站活动 报名

  • ž   Asta——Go在工业领域的应用实践
  • ž   腾讯——Go性能优化之路
  • ž   广发证券——Go与极限性能实践
  • ž   OPPO——云平台存储系统架构设计与容器化实践
  • ž   平安科技——从面试题目到Golang汇编
  • ž   腾讯——如何向Go官方提交代码
  • ž   华为云——KubeEdge:云原生边缘计算平台的Golang实践

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

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

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

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

Go 开发者进阶周刊(Dec 3rd)

astaxie 发表了文章 • 0 个评论 • 1149 次浏览 • 2019-12-20 10:32 • 来自相关话题

前沿动态(来自 Go 官方的最新讯息)1. ...查看全部

前沿动态(来自 Go 官方的最新讯息)

1.Go1.14beta1发布


语言学习(Golang 编程知识与技巧)

1.Go 开发关键技术指南 | 为什么你要选择 Go?(内含超全知识大图)


该指南主讨论了服务器领域常见的并发问题,也涉及到了工程化相关的问题,还理了 C 背景程序员对于 Go 的 GC 以及性能的疑问探讨了 Go 的错误处理和类型系统最佳实践,以及依赖管理、接口设计的正交性,当然也包含我们服务器开发中对于 Go 实践总结候也会对一些有趣的问题做深度的挖掘,列出了 Go 重要的事和资料集合,以及 Go2 进展和思考

2.goroutine究竟占用多少内存?

解释 goroutine 是如何做到占用更少资源的,单个 goroutine 究竟占用多少内存等问题。

3.Go中尾递归

Go中没有尾调用优化,但并不妨碍我们使用尾递归函数

4.Go 服务开发平滑升级之优雅重启

本文章主要探讨golang服务器开发中在平滑升级过程中对优雅重启的使用与研究。

5.Go Gin 实战系列

主要介绍查询参数,以及获取查询参数的示例以及底层原理

6.Go 高级并发模式

7.Go 中干净的配置管理

8.喜欢 Go 的地方:任何类型可以添加方法

9.Go 并发 3 个常见的陷阱和得到的教训

10.defer 常见陷阱

11.【go语言系统调用】通用IO模型

12.通过TCP_NODELAY控制数据包流

 

工程实践(Go的项目应用实践)

 

1.go语言浅析二叉树

分享关于二叉树相关的知识点,并用go语言实现一个二叉树和对二叉树进行遍历。


2.Golang 在电商即时通讯服务建设中的实践

即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商。本文结合马蜂窝旅游电商 IM 服务的发展历程,重点介绍基于 Go 的 IM 重构。


3.基于Go语言开发 Serverless 云原生应用

Knative 提供了一整套云原生应用的 Serverless 模型,使得我们可以方便的基于 Go 语言开发 Serverless 云原生应用。


4.Go远程执行程序

使用Go搭建一个可以远程执行命令的http服务器

5.使用redis和grpc构建微服务

使用Go redis grpc docker构建一个简单的微服务

6.使用 Grafana 监控你的 Go channel

7.实现一个 Go 微服务

8.golang mail 实现ssl发送邮件

由于使用的阿里云服务器不能telnet 25端口,发送ssl时候感觉很蹩脚,就自己写了一个go mail 发送

9.Golang和生产就绪型解决方案:第2部分

10.golang服务开发平滑升级之优雅重启 

主要探讨golang服务器开发中在平滑升级过程中对优雅重启的使用与研究。

 

生态拓展(云原生等 Go 生态体系)

 

1.kubeedge源码分析系列之edgecore(六) edgemsh

edgemesh作为edgecore中节点级别的代理解决方案,主要实现了节点内的流量代理、节点间的流量代理和节点内的DNS解析3块功能,本文剖析这三块功能的具体实现。

2.kubernetes 网络分析之四 开源网络组件

K8S 底层网络所需要解决的两个问题:

  • 协助 k8s , 给每个 NODE上的 docker 容器都分配互相不冲突的 IP;
  • 在这些 IP 地址之间简历一个覆盖网络(overlay Network), 通过这个覆盖网络, 将数据包原封不动地传递到目标容器内。

3.构建docker镜像时也需要考虑安全性 

开源项目(社区新涌现的开源成果)

1.gig:一个 gitignore 生成器的使用教程

2.gim:Golang 写的 IM 服务器 

3.go-locale跨平台地区检查库

5.ghw:Go 硬件检查/发现库

6.gemini:Scylla和Cassandra集群测试工具

7.garble:Go程序混淆工具    

12.24 Gopher Meetup 上海站活动 PPT下载

  • ž   趣头条——长链接方面的实践
  • ž   讯联数据——Go 语言的抽象编程心得
  • ž   TutorABC——远程协同设计
  • ž   蚂蚁金服&携程——dubbogo的现状与未来

01.04 Gopher Meetup Plus深圳站活动 报名

  • ž   Asta——Go在工业领域的应用实践
  • ž   腾讯——Go性能优化之路
  • ž   广发证券——Go与极限性能实践
  • ž   OPPO——云平台存储系统架构设计与容器化实践
  • ž   平安科技——从面试题目到Golang汇编
  • ž   腾讯——如何向Go官方提交代码
  • ž   华为云——KubeEdge:云原生边缘计算平台的Golang实践

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

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

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

Go 开发者进阶周刊(Dec 2nd)

astaxie 发表了文章 • 0 个评论 • 1694 次浏览 • 2019-12-12 23:23 • 来自相关话题

语言学习(Golang 编程知识与技巧)ž1. ...查看全部

语言学习(Golang 编程知识与技巧)

ž1. 用图说话:Go语言的协程,系统线程以及CPU管理

ž   ž  

诀窍是不要将整个文件加载到内存中,并在继续移动文件指针时继续处理每个单词。这样,我们就可以用最少的内存资源轻松地处理整个文件。并且在文件的不同部分保留多个指针,每个线程同时读取文件的块。

2.GOMAXPROCS和实时更新

3.Go 标准库 encoding/json 真的慢吗?

关于标准库 encoding/json 性能差的问题在很多地方被讨论过,也有很多第三方库在尝试解决这个问题,比如easyjsonjsoniterffjson。但是标准库 encoding/json 真的慢吗?它一直都这么慢吗?

4.译|并发不是并行

并发性是强大的,但它不是并行性的,但它支持并行性,而且它使并行性变得容易。

5.源码阅读 | 短小精悍的 Once 

ž   

Once 即保证某个动作只执行一次。这很好理解,延迟初始化、单例(懒汉式)就是这种场景。

6.go中defer的一个隐藏功能

你可以使用defer在任何函数开始后和结束前执行配对的代码。

7.Go动态作用域变量 

8.GoAdvent2019:使用标准库中的flag包

在本文中,我们将了解如何使用内置标志包编写命令行应用程序。

9.在Go中使用Socket.IO

Websocket是全双工的基于TCP层的通信协议,为浏览器及网站服务器提供处理流式推送消息的方式。它不同于HTTP协议,但仍依赖HTTP的Upgrade头部进行协议的转换。

10.Golang在runtime中的一些骚东西

11.为什么golang没有volatile 

从 java 转 golang 程序员可能会有一个疑问:为什么 golang 没有 volatile 关键字?这样的话如何保证可见性?

12.[译]Go:垃圾回收器是如何监控你的应用的?

Go的垃圾回收器旨在帮助开发者自动清理应用程序的内存。然而每次跟踪内存并清理都会影响程序运行的性能。Go的垃圾回收器旨在清理内存的同时也关注性能,主要是以下几个指标:

  • 当程序暂停的时的两阶段尽可能减少
  • 一次垃圾回收的周期少于10ms
  • 一次垃圾回收操作不能占用超过25%的CPU

工程实践(Go的项目应用实践)

1.Go 生成数据库架构文档

2.Go语言国际电子表格文档格式标准实践

ž   

3.使用Go解析180亿条JSON行

4.Go 项目结构最佳实践

提出一系列选项,可以从中选择如何在新的世界秩序中构建Go应用程序。

5.Go 性能测试惊奇 

6.使用Go,QUIC和Micro建立全球服务网络

分享具体的技术实现细节


7.Go运行时调度程序处理系统调用的巧妙方法 

ž8.Bazel构建Golang项目

Bazel 是一款谷歌开源的非常优秀的构建系统,速度极快、可伸缩、跨语言并且可扩展。使用 Bazel 构建 golang 项目,除了 Bazel 本身特性外,还需要了解针对 golang 的扩展包 rules_go。另外,可以使用 bazel gazelle 来进行一些自动生成的工作。

9.Go项目的GitlabCI缓存

10.Go程序中嵌入静态资源方案选择 

用Go编写的应用程序很容易部署,因为它们是静态编译的。如果您需要管理运行web应用程序所需的一组文件的位置和权限,那么这种优势就会消失。解决方案是将所有必需的文件编译到应用程序二进制文件本身。这可以在Go中通过使用一个包含文件中字节的字符串表示的字节片来实现。

生态拓展(云原生等 Go 生态体系)

1.Gotty源码分析

GoTTY 是一个简单的基于 Go 语言的命令行工具,它可以将你的终端(TTY)作为 web 程序共享。它会将命令行工具转换为 web 程序。

2.一文详解微服务架构

从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。

3.把阿里巴巴的核心系统搬到云上,架构上的挑战与演进是什么?

阿里巴巴核心系统作为全球最大规模、峰值性能要求最高的电商交易系统,在 2018 年之前只通过混合云弹性上云方式,为 双11 节约大量成本。直到 2019 年,阿里巴巴实现了核心交易系统全面上云并经历了 双11 峰值的考验。

开源项目(社区新涌现的开源成果)

1.Slog:Go的最小日志记录库

2.Cap’n Proto:Protobuf作者新开发的多语言通用数据交换格式

3.JetStream:NATS内置持久化方案进入TP阶段 

4.Pion:Go实现不发出信号的情况下连接两个WebRTC服务

5.Fvm:Go 打造 Flutter 多版本管理工具:fvm 

 

彩蛋(活动与招聘)

12.24 Gopher Meetup 上海站活动 报名

  • ž   趣头条——长链接方面的实践
  • ž   讯联数据——Go 语言的抽象编程心得
  • ž   TutorABC——远程协同设计
  • ž   蚂蚁金服&携程——dubbogo的现状与未来

01.04 Gopher Meetup Plus深圳站活动 报名

  • ž   Asta——Go在工业领域的应用实践
  • ž   腾讯——Go性能优化之路
  • ž   广发证券——Go与极限性能实践
  • ž   OPPO——云平台存储系统架构设计与容器化实践
  • ž   平安科技——从面试题目到Golang汇编
  • ž   腾讯——如何向Go官方提交代码
  • ž   华为云——KubeEdge:云原生边缘计算平台的Golang实践

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

Go 开发者进阶周刊

astaxie 发表了文章 • 4 个评论 • 2712 次浏览 • 2019-12-05 23:24 • 来自相关话题

前沿动态(来自Go官方的最新资讯) ...查看全部

前沿动态(来自Go官方的最新资讯)

  1. 2019 Go Developer 官方调查

语言学习(Golang 编程知识与技巧)

  1. [译] Go语言的协程,系统线程以及CPU管理  
  2. Go Module探索之工程、依赖与Gopls
  3. [译] 《Go in Action》第6章 Concurrency 
  4. 你应该知道的Go漏洞之Top5
  5. Go中的版本控制原则
  6. 万字长文带你深入浅出 Golang Runtime   
  7. Go切片内存应用技巧 
  8. Go 编写友好的命令行应用程序
  9. Go 语言中避免类型推断 
  10. Go 命令行解析 flag 包之通过子命令实现看 go 命令源码 
  11. 浅谈 Go 语言中的读写锁和互斥锁 
  12. Go中的中断处理 
  13. 停止信任你的依赖包
  14. Go的组合与继承

工程实践(Go的项目应用实践)

  1. 使用 Go AST 重构代码 
  2. 利用 Go 开发布隆过滤器 
  3. uber-go 漏桶限流器使用与原理分析
  4. Go后台定时任务执行
  5. 使用 OpenFaaS 和 Go 开启 Serverless 之旅 
  6. Go 号称几行代码开启一个 HTTP Server,底层都做了什么?
  7. 70行Go代码打败C
  8. [译]Go: 理解Sync.Pool的设计思想 
  9. Go 项目终极设置

生态拓展(云原生等 Go 生态体系)

  1. k8s v1.17 新特性预告: 拓扑感知服务路由
  2. 蚂蚁金服 Service Mesh 大规模落地系列 - RPC 篇
  3. 给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践 
  4. kubeedge 源码分析系列之 edgecore

开源项目(社区新涌现的开源成果)

  1. nebula: 一个可扩展的overlay网络工具
  2. arachne:Go实现的丢包检测系统 
  3. orbiter:元数据集群管理器  
  4. errwrap:error 检查优化工具  
  5. reflow:字符串自动换行库
  6. Golang 实现的分布式限流滑动窗口算法

彩蛋(活动与招聘)

11.30 Gopher Meetup 北京站 PPT 下载

  • 探探长链接项目的Go语言实践
  • 蚂蚁金服深度剖析Mosn
  • 美团构建部署平台解析与 Go 的实践 
  • Go语言电子表格文档格式标准实践
  • 探探微服务架构演进之路 

12.24 Gopher Meetup 上海站站活动 报名

[上海徐汇] 积梦智能招聘Go工程师 详情