-
详述 Golang 的符号表
ℹ️ 本文基于 Go 1.13。 符号表是由编译器生成和维护的,保存了与程序相关的信息,如函数和全局变量。理解符号表能帮助我们更好地与之交互和利用它。 符号表 Go 编译的所有二进制文件默认内嵌了符号表。我们来举一个例子并研究它。下面是代码: var AppVersion string func main() { fmt.Println(`Version: `+AppVersion) } 可以通过命令 nm 来展示符号表;下面是从 OSX 的结果中提取的部分信息: 00000000011772…
-
3种常用的 Web 会话管理方式
http 是无状态的,即我们的一次请求结束后,下一次请求,服务端他并不知道是哪个用户发来的。 我们在业务开发中通常是不需要关注是哪个客户端发来的,更多的是关注是哪个用户发来的。 基于这个特点,我们在处理业务逻辑时,就得想方设法地在下一次请求时让服务端知道我是哪个用户。 为什么是下一次呢? 因为首先我们得先登录,才能告诉下一次请求是哪个,否则我们的很多业务就没法开展,这就是所谓的会话管理。 那我们在项目里通常是怎么去管理我们的会话呢? 下面介绍常用的三种方式: 一、基于 server 端 sess…
-
基于 Go 语言开发的监控系统
01 介绍 小米开源的监控系统 open-falcon 和滴滴开源的日志采集工具 falcon-log-agent 作为一组黄金搭档,被互联网公司广泛使用。 本文介绍怎么使用这组黄金搭档监控业务系统的日志。 02 open-falcon open-falcon 使用 Golang 和 Python 开发,其中 Python 主要开发的是 Dashboard。 限于篇幅,本文不准备介绍 open-falcon 的原理,仅介绍如何安装。 安装 open-falcon 之前,必须确保已成功安装 Re…
-
Go语言中浅拷贝和深拷贝的区别是什么?
要想搞明白深拷贝和浅拷贝的区别,我们需要先弄懂以下几点: 一、值类型和引用类型 Go 语言里面变量有两类,一类是值类型,一类是引用类型。 两者区别是什么呢? 我们在电脑里面创建的变量,都是需要内存来存放的。 值变量就是直接,一个内存地址对应一个值。 而引用变量,则是某个值存放的是另一个值的地址。 我画了一个逻辑图,帮助我们去理解这个概念。 在 Go 语言中: string、int、bool、float 等这些都属于值类型 slice、map、chan 等这些都属于引用类型 二、什么是浅拷贝和深拷…
-
面试官:值为 nil 为什么不等于 nil ?
小明同学去面试被问到了这么一个面试题,请看代码: 请问输出结果是啥? 可能很多同学,会认为结果是输出两个 nil。 为什么呢? 因为 f 和 a 都没初始化,都是 nil,所以循环遍历后肯定也是 nil。 如果你的答案也是这样,那就掉进坑里了。 答案是,啥都不会输出! 且听我慢慢给你分析: 一、变量的值和类型 我们先来打印下这两个值: 我们这样打印其实是打印的是他的值,是 nil 没错的。 但是类型不是 nil。 我们可以这样打印他类型: 二、if 判 nil 含有对类型的判断 当我们从 int…
-
面试官:值为 nil 为什么不等于 nil ?
小明同学去面试被问到了这么一个面试题,请看代码: var f func() var a *struct{} list := []interface{}{f, a} for _, item := range list { if item == nil { fmt.Println("nil") } } 请问输出结果是啥? 可能很多同学,会认为结果是输出两个 nil。 为什么呢? 因为 f 和 a 都没初始化,都是 nil,所以循环遍历后肯定也是 nil。 如果你的答案也是这样,那就掉进坑里了…
-
Go 中的数据分析——如何使用 Gota 包
数据分析是过滤、操纵和处理原始数据和数据集以从中获得洞察力的过程。Python 和 R 通常是数据分析的首选语言。但是这些天,Go 正为此目的而变得越来越流行。在本教程中,我们将介绍 Gota(Go 中的数据分析包)及其核心功能和用途。
-
Golang 中使用 JSON 时如何区分空字段和未设置字段?
Golang 中使用 JSON 时如何区分空字段和未设置字段?
-
Goroutine 是 Go 的并发机制中 绝对的主角
由于对普通语法的介绍网上资源极多,Go 官方的上手指南 A Tour of Go: https://tour.golang.org/ (请自备梯子)就是极好的例子,我不再打算就语法细节进行详述。这次,让我们直切肯綮,从 Go 最大的卖点入手——并发 (Concurrency)。
-
为什么 Go 用起来会难受?这 6 个细节你知道吗
在做新的应用选型时,我们会进行应用编程语言的选择,这时会纠结 Java、PHP、Go...各种,会思考有没有致命的问题,不能用?