• 玩转 Go 日志框架 zap

    本文包括两部分,一部分是源码解读,另一部分是对zap的增强。 由于zap是一个log库,所以从两方面来深入阅读zap的源码,一个是初始化logger的流程,一个是打一条log的流程。 Github地址:github.com/uber-go/zap… 初始化Logger zap的Logger是一般通过一个Config结构体初始化的,首先看下这个结构体有哪些字段 type Config struct {        // 日志Level,因为可以动态更改,所以是atomic类型的,毕竟比锁的性能好…

    go开发, 技术干货 2022年11月7日
  • 浅谈 Go 语言代码注释问题

    每隔一段时间,网上总会突然出现一些令人讨厌的帖子,其观点是:不应该为代码写注释,它存在的唯一原因是因为代码本身不足够好。对于这些论点,我完全不能苟同。 烂代码 他们的观点也不完全是错误的。没有人能说自己的代码足够好。代码本身也会慢慢变坏。你知道什么时候代码腐烂得最厉害吗?当你六个月没有碰这些代码的时候! 当回过头再读的时候,你会非常好奇:“这个作者到底是怎么想的?”(于是,使用 Git blame 来查看历史记录,没想到代码竟然是自己写的,因为这是你的代码。) 反对注释者的论点是:需要注释的唯一…

    go开发, 技术干货 2022年11月2日
  • 详述 Golang 的符号表

    ℹ️ 本文基于 Go 1.13。 符号表是由编译器生成和维护的,保存了与程序相关的信息,如函数和全局变量。理解符号表能帮助我们更好地与之交互和利用它。 符号表 Go 编译的所有二进制文件默认内嵌了符号表。我们来举一个例子并研究它。下面是代码: var AppVersion string func main() {  fmt.Println(`Version: `+AppVersion) } 可以通过命令 nm 来展示符号表;下面是从 OSX 的结果中提取的部分信息: 00000000011772…

    go开发, 技术干货 2022年10月20日
  • Go:符号表是什么?如何使用?

    ℹ️ 本文基于 Go 1.13 ,原文及译者信息在文末。 符号表是由编译器生成和维护的,保存了与程序相关的信息,如函数和全局变量。理解符号表能帮助我们更好地与之交互和利用它。 符号表 Go 编译的所有二进制文件默认内嵌了符号表。我们来举一个例子并研究它。下面是代码: var AppVersion string func main() {  fmt.Println(`Version: `+AppVersion) } 可以通过命令 nm 来展示符号表;下面是从 OSX 的结果中提取的部分信息: 00…

    go开发, 技术干货 2022年10月14日
  • 详述 Golang 的符号表

    ℹ️ 本文基于 Go 1.13。 符号表是由编译器生成和维护的,保存了与程序相关的信息,如函数和全局变量。理解符号表能帮助我们更好地与之交互和利用它。 符号表 Go 编译的所有二进制文件默认内嵌了符号表。我们来举一个例子并研究它。下面是代码: var AppVersion string func main() {  fmt.Println(`Version: `+AppVersion) } 可以通过命令 nm 来展示符号表;下面是从 OSX 的结果中提取的部分信息: 00000000011772…

    go开发, 技术干货 2022年10月9日
  • 3种常用的 Web 会话管理方式

    http 是无状态的,即我们的一次请求结束后,下一次请求,服务端他并不知道是哪个用户发来的。 我们在业务开发中通常是不需要关注是哪个客户端发来的,更多的是关注是哪个用户发来的。 基于这个特点,我们在处理业务逻辑时,就得想方设法地在下一次请求时让服务端知道我是哪个用户。 为什么是下一次呢? 因为首先我们得先登录,才能告诉下一次请求是哪个,否则我们的很多业务就没法开展,这就是所谓的会话管理。 那我们在项目里通常是怎么去管理我们的会话呢? 下面介绍常用的三种方式: 一、基于 server 端 sess…

    go开发, 技术干货 2022年9月27日
  • 基于 Go 语言开发的监控系统

    01 介绍 小米开源的监控系统 open-falcon 和滴滴开源的日志采集工具 falcon-log-agent 作为一组黄金搭档,被互联网公司广泛使用。 本文介绍怎么使用这组黄金搭档监控业务系统的日志。 02  open-falcon open-falcon 使用 Golang 和 Python 开发,其中 Python 主要开发的是 Dashboard。 限于篇幅,本文不准备介绍 open-falcon 的原理,仅介绍如何安装。 安装 open-falcon 之前,必须确保已成功安装 Re…

    go开发, 技术干货 2022年9月9日
  • Go语言中浅拷贝和深拷贝的区别是什么?

    要想搞明白深拷贝和浅拷贝的区别,我们需要先弄懂以下几点: 一、值类型和引用类型 Go 语言里面变量有两类,一类是值类型,一类是引用类型。 两者区别是什么呢? 我们在电脑里面创建的变量,都是需要内存来存放的。 值变量就是直接,一个内存地址对应一个值。 而引用变量,则是某个值存放的是另一个值的地址。 我画了一个逻辑图,帮助我们去理解这个概念。 在 Go 语言中: string、int、bool、float 等这些都属于值类型 slice、map、chan 等这些都属于引用类型 二、什么是浅拷贝和深拷…

    go开发, 技术干货 2022年7月27日
  • 面试官:值为 nil 为什么不等于 nil ?

    小明同学去面试被问到了这么一个面试题,请看代码: 请问输出结果是啥? 可能很多同学,会认为结果是输出两个 nil。 为什么呢? 因为 f 和 a 都没初始化,都是 nil,所以循环遍历后肯定也是 nil。 如果你的答案也是这样,那就掉进坑里了。 答案是,啥都不会输出! 且听我慢慢给你分析: 一、变量的值和类型 我们先来打印下这两个值: 我们这样打印其实是打印的是他的值,是 nil 没错的。 但是类型不是 nil。 我们可以这样打印他类型: 二、if 判 nil 含有对类型的判断 当我们从 int…

    go开发, 技术干货 2022年7月12日
  • 面试官:值为 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开发, 技术干货 2022年7月7日
历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!