我的Go之路

全职写Go已经很多年了,我对于Go的认识,大概经历过三次升级,但每一次突破,都不是Go语言本身带来的,而是从其它语言领悟的,可见“功夫在诗外”。我想和你谈谈,这三次升级的关键的概念,它们是:接口,并发,反射。没有一个概念是轻易理解的,就当你当初写程序无法一下子理解变量一样,它们更甚。 第一次是当年移动开发热潮,我跟风买了Macbook Pro,装Xcode,写Objective-C。OC的作者Brad Cox原来写Smalltalk,因此在C上面加了大量的宏,让C支持面向对象。OC支持接口的方式...阅读全文

掘金 2019年12月16日 qgymje

记录 Elasticsearch 的 maximum shards open 问题

问题背景 某天打开 Jaeger UI 后,发现里面没有任何数据了,这是个奇怪的问题。 然后立马上服务器检查了 jaeger-collector, jaeger-agent, jaeger-query 和 Elasticsearch 的服务进程、端口及网络通信。所有一切都正常。 然后进一步排查数据流向问题,通过排查 jaeger-collector 日志,发现 jaeger-agent -> jaeger-collector 之间的数据传输没有问题。 而 jaeger-collector -> ...阅读全文

Segmentfault 2019-12-16 21:32:40 维子

打造 Zap 开箱即用日志组件

logrus 是 golang 一款非常优秀的日志框架, 其优点非常明显: 优雅的代码框架设计, 可以作为我们设计组件的参考. 具体请参见我前面文章(链接文末给出) 使用简单 组件化的开发思路 灵活的输出方式 但是, 性能终究是忍痛舍弃 logrus 的“阿喀琉斯之踵”, 前面的文章深入研究了 logrus 性能低的原因 目前 golang 日志库的大众选择主要集中在: logrus, zap, zerolog. zap 和 zerolog 的性能都是优秀的, 但是从用法习惯上我更倾向于 zap...阅读全文

简书 2019-12-16 15:32:45 HHF技术博客

技术栈:golang的技术特性和差异

本文属于Golang学习之旅的一部分,更多文章可到Golang中可见。 本文只要讲讲Golang和其他语言的,差异性,让你可以在其他中,可以快速切换到Golang中。 Golang吸收了大量语言的特性,有pythone的简单开发,也解决了很多问题,至于为什么选择使用Golang,只要的PHP的局限性太大,JAVA太重。Pythone做数据分析,自己的能力不行。 Docker是K8s,K3s都是又golang编写的,搞不好以后可以往架构的方面发展。 我们先看一下的代码 package main /...阅读全文

简书 2019-12-16 15:32:43 傻梦兽

goroutine究竟占用多少内存?

引言 相信接触过 Go 语言的同学,都应该有听说过 Go 协程,也就是 goroutine 的概念,对于 goroutine 的介绍,大部分文章中提到的都是,相较于线程,goroutine 十分轻量,相同大小的内存,可以运行更多的 goroutine。但是很少有文章解释 goroutine 是如何做到占用更少资源的,单个 goroutine 究竟占用多少内存?本文将针对这些问题进行解释。 一些基本结论 goroutine 所占用的内存,均在栈中进行管理 goroutine 所占用的栈空间大小,由...阅读全文

掘金 2019年12月15日 ClamorousKun

技术栈:golang的技术特性和差异

本文属于Golang学习之旅的一部分,更多文章可到Golang中可见。 本文只要讲讲Golang和其他语言的,差异性,让你可以在其他中,可以快速切换到Golang中。Golang吸收了大量语言的特性,有pythone的简单开发,也解决了很多问题,至于为什么选择使用Golang,只要的PHP的局限性太大,JAVA太重。Pythone做数据分析,自己的能力不行。Docker是K8s,K3s都是又golang编写的,搞不好以后可以往架构的方面发展。 我们先看一下的代码 package main //包...阅读全文

Segmentfault 2019-12-16 21:32:40 傻梦兽0

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

马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商。 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣、食、住、行等方方面面;从消费金额来看,往往单次消费额度较大;对目的地的陌生、在行程中可能的问题,这些因素使用户在购买前、中、后都存在和商家沟通的强烈需求。可以说,一个好用的 IM 可以在一定程度上对企业电商业务的 GMV 起到促进作用。 本文我们将结合马蜂窝旅游电商 IM 服务的发展历程,重点介绍基于 Go 的 ...阅读全文

掘金 2019年12月16日 马蜂窝技术

Go教程第九篇:可变参数函数

可变参数函数 欢迎来到《Golang系列教程》的第九篇文章---可变参数函数。 什么是可变参数函数 ? 通常情况下,函数只接受固定长度的实参作为参数。而 可变参数函数(a variadic function) 可以接收不定数量的实参。如果最后一个参数的前缀是三个省略号"...",那么对于对那个参数而言,这个函数就可以接收任意数量的实参。 只有函数的最后一个参数可以是可变的。我们将在这篇文章的下一部分中学习到这究竟是为什么。 Syntax语法 func hello(a int,b ... int)...阅读全文

简书 2019-12-16 11:32:45 Tesfaye

关键字过滤脏字过滤Trie算法golang实现

游戏,还有社交属性类软件都需要的脏字过滤功能。关于Trie算法 自行百度。 不多说直接撸代码 // Trie.go // 358860528@qq.com package comm import ( "unicode/utf8" ) /* 脏字过滤库 */ type Trie struct { Root *TrieNode } type TrieNode struct { Children map[rune]*TrieNode End bool } func NewTrie() Trie { v...阅读全文

简书 2019-12-16 11:32:44 数据小菜鸟

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

马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商。 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣、食、住、行等方方面面;从消费金额来看,往往单次消费额度较大;对目的地的陌生、在行程中可能的问题,这些因素使用户在购买前、中、后都存在和商家沟通的强烈需求。可以说,一个好用的 IM 可以在一定程度上对企业电商业务的 GMV 起到促进作用。 本文我们将结合马蜂窝旅游电商 IM 服务的发展历程,重点介绍基于 Go 的 ...阅读全文

Segmentfault 2019-12-16 21:32:40 马蜂窝技术

Golang学习笔记-zerolog

zerolog是一个高性能,支持日志等级,钩子的结构化日志库。log的Print()和Printf()方法默认输出到os.Stderr,默认日志等级为debug,用法和官方log库相同。 package main import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) func main(){ zerolog.TimeFieldFormat = zerolog.TimeFormatUnix log.Print("hello w...阅读全文

简书 2019-12-16 03:32:39 土豆吞噬者

Golang并发工具包之信号量(Semaphore)

Go虽然天生的支持高并发,但是有些场景下我们还是需要控制协程同时并发处理的数量,在Java的juc包中已经提供了类似功能的工具类-信号量(Semaphore),它是基于AQS实现的。Go的SDK中并没有提供类似的API,我们通过goroutine和channel实现一个简单的Semaphore,并提供:获取许可(Acquire())、指定时间内获取许可(TryAcquireOnTime)、释放许可(Release())等方法,具体实现如下: type Semaphore struct { per...阅读全文

简书 2019-12-16 03:32:39 _男猪脚

自己动手用golang实现双向链表

双向链表主要有链表跟节点2个结构体type Dnode struct { data interface{} prev *Dnode next *Dnode } type DList struct { head *Dnode tail *Dnode size int }特点:1、除头部、尾部2个节点外,其他任意节点都通过prev / next 分别指向前置后置节点2、头部节点前置节点为空,同理尾部节点后置节点为空主要实现的API如下:1、查询查询链表长度查询任意节点2、添加从开头插入节点从尾部插入...阅读全文

51CTO博客 2019-12-15 20:11:52 筑梦攻城狮

《Go 语言程序设计》读书笔记 (一)基础类型和复合类型

前言 最近在读《Go 语言程序设计》这本书想通过看书巩固一下自己的基础知识,把已经积累的点通过看书学习再编织成一个网,这样看别人写的优秀代码时才能更好理解。当初工作中需要使用 Go开发项目时看了网上不少教程,比如 uknown 翻译的《the way to go》看完基本上每次使用遇到不会的时候还会再去翻阅,这次把书中的重点还有一些平时容易忽视的Go语言中各种内部结构(类型、函数、方法)的一些行为整理成读书笔记。 因为《Go 语言程序设计》不是针对初学者的,所以我只摘选最重要的部分并适当补充和调...阅读全文

掘金 2019年12月15日 kevinyan

使用 Makefile 构建指令集

使用 Makefile 构建指令集 make 是一个历史悠久的构建工具,通过配置 Makefile 文件就可以很方便的使用你自己自定义的各种指令集,且与具体的编程语言无关。 例如配置如下的 Makefile : run dev: NODE_ENV=development nodemon server.js 复制代码这样当你在命令行执行 make run dev 时其实就会执行 NODE_ENV=development nodemon server.js 指令。 使用 Makefile 构建指令集...阅读全文

掘金 2019年12月15日 凌虚

04Gin源码解读

简介 内置中间件的实现 recovery auth logger errors 总结 简介 Gin 源码解读, 基于 v1.5.0 版本. 内置中间件的实现 前面已经研究过中间件的原理了, 这次来看一下内置的中间件是如何实现的. recovery // Recovery returns a middleware that recovers from any panics and writes a 500 if there was one. func Recovery() HandlerFunc ...阅读全文

简书 2019-12-15 17:32:40 刷漆猫咪