Web Analytics

一文搞懂Go语言中的切片排序

本文首发于“Gopher部落”知识星球! 切片是Go语言中引入的用于在大多数场合替代数组的语法元素。切片是长度可变的同类型元素序列,它不支持存储不同类型的元素,当然如果你非用**sl := []interface{}{“hello”, 11, 3.14}**来抬杠^_^,那就另当别论。 ...

November 26, 2020 · 7 min · Tony Bai

Go 1.14中值得关注的几个变化

可能是得益于2020年2月26日Go 1.14的发布,在2020年3月份的TIOBE编程语言排行榜上,Go重新进入TOP 10,而去年同期Go仅排行在第18位。虽然Go语言以及其他主流语言在榜单上的“上蹿下跳”让这个榜单的权威性饱受质疑:),但Go在这样的一个时间节点能进入TOP 10,对于Gopher和Go社区来说,总还是一个不错的结果。并且在一定层度上说明:Go在努力耕耘十年后,已经在世界主流编程语言之林中牢牢占据了自己的一个位置。 ...

March 8, 2020 · 13 min · Tony Bai

Uber Go语言编码规范

Uber是世界领先的生活出行服务提供商,也是Go语言的早期adopter,根据Uber工程博客的内容,大致可以判断出Go语言在Uber内部扮演了十分重要的角色。Uber内部的Go语言工程实践也是硕果累累,有大量Go实现的内部工具被Uber开源到github上,诸如被Gopher圈熟知的zap、jaeger等。2018年年末Uber将内部的Go风格规范开源到github,经过一年的积累和更新,该规范已经初具规模,并受到广大Gopher的关注。本文是该规范的中文版本,并”夹带“了部分笔者的点评,希望对国内Gopher有所帮助。 注:该版本基于commit 3baa2bd翻译,后续不会持续更新。 一. 介绍 样式(style)是支配我们代码的惯例。术语“样式”有点用词不当,因为这些约定涵盖的范围不限于由gofmt替我们处理的源文件格式。 ...

October 12, 2019 · 17 min · Tony Bai

记一次go panic问题的解决过程

一. Panic问题概述 本周收到客户在bugclose上填写的一个issue:添加一个下发通道后,pushd程序panic并退出了!程序panic时输出的stacktrace信息摘录如下: ...

April 4, 2019 · 7 min · Tony Bai

defer函数参数求值简要分析

一. 引子 书接上文,在发表了《对一段Go语言代码输出结果的简要分析》一文之后,原问题提出者又有了新问题,这是一个典型Gopher学习Go的历程,想必很多Gopher们,包括我自己都遇到过的。我们先来看看这段代码(来自原问题提出者): // https://play.golang.org/p/dOUFNj96EIQ package main import "fmt" func main() { var i int = 1 defer fmt.Println("result =>",func() int { return i * 2 }()) i++ } 这里显然有坑!初学者的常规逻辑一般是:defer是在main函数退出后执行,退出前i已经做了+1操作,值变成了2,这样一来defer后的Println应该输出:result => 4 才对!实际输出结果呢? ...

March 23, 2018 · 5 min · Tony Bai

对一段Go语言代码输出结果的简要分析

年后事情实在是多,各种被催进度,于是好长一段时间未更博客了,自责中….。今天蹦出来热热身^0^! 中午在微博私信中看到一封来自某Gopher的咨询,他贴了一段代码,并表示对代码的输出结果的不解,希望我能帮他分析一下。他的代码如下: ...

March 20, 2018 · 4 min · Tony Bai

Go 1.8中值得关注的几个变化

在已经过去的2016年,Go语言继在2009年之后再次成为编程语言界的明星- 问鼎TIOBE 2016年度语言。这与Go team、Go community和全世界的Gophers的努力是分不开的。按计划在这个2月份,Go team将正式发布Go 1.8版本(截至目前,Go的最新版本是Go 1.8rc3)。在这里我们一起来看一下在Go 1.8版本中都有哪些值得Gopher们关注的变化。 ...

February 3, 2017 · 19 min · Tony Bai

《Understanding and Using C Pointers》要点先睹为快

如果你问十个C程序员:你觉得C语言的核心是什么?这十个程序员都会回答:指针。 指针具备成为C语言核心的两个关键要素:强大与争议。 * 指针的强大源自于其天生与机器内存模型的适配。使用指针让代码紧凑,并可获得仅次于汇编代码的执行效率;使用指针可以让C程 序员毫不费力地尽情操纵着内存中的每个byte甚至是bit;使用指针可以为C程序员提供无与伦比的操作灵活性。总之,在C语言中指针几乎是无所 不能的代名词。得指针者得天下,没有指针,C语言将变得平庸。 ...

May 28, 2013 · 19 min · Tony Bai

Go与C语言的互操作

Go有强烈的C背景,除了语法具有继承性外,其设计者以及其设计目标都与C语言有着千丝万缕的联系。在Go与C语言互操作(Interoperability)方面,Go更是提供了强大的支持。尤其是在Go中使用C,你甚至可以直接在Go源文件中编写C代码,这是其他语言所无法望其项背的。 在如下一些场景中,可能会涉及到Go与C的互操作: 1、提升局部代码性能时,用C替换一些Go代码。C之于Go,好比汇编之于C。 2、嫌Go内存GC性能不足,自己手动管理应用内存。 ...

September 26, 2012 · 9 min · Tony Bai