解决 gvm 工具无法下载安装包的问题

GVM(Go Version Manager) 是一款用于管理和切换不同 Go 语言版本的工具。它允许用户在同一台计算机上轻松安装、使用和管理多个 Go 版本,同时还能确保项目之间的依赖关系井然有序。 GVM 的主要功能包括: - 安装和卸载 Go 版本:GVM 允许用户快速安装和卸载 Go 语言的不同版本,以便在不同项目 ... 阅读更多

goland 配置 proto 文件搜索路径

默认情况下,goland(jetbrains 家的软件:idea 、 pycharm 、 phpstorm 以及 webstorm 都是一样) 安装 protobuf 插件后只会在一个特定的库路径下搜索 proto 文件。如果自定义了公共的头文件,导入的时候 goland 无法自动识别出来,显示无法解析 proto 文件 (报错为 「C ... 阅读更多

国内几个优质的 Go Module 代理仓库服务

一、简介 go module 公共代理仓库,代理并缓存 go 模块。你可以利用该代理来避免 DNS 污染导致的模块拉取缓慢或失败的问题,加速你的构建。 简单来说就是国内访问被墙,go get 无法在线获取到仓库,代理仓库就是帮我们解决这个问题的。 二、使用方法 使用 go1.11 以上版本并开启 go module 机 ... 阅读更多

Golang 中 glog 库的使用方法

一、关于 glog 库 golang 中的 glog 库是 google 著名开源 C++日志库 glog 的 golang 版本,在 golang 默认日志库的基础上做了更进一层的封装使得该库能更贴近日常使用。项目首页为 golang/glog,当前版本的 glog 有以下几个特点: 支持四种日志级别:INFO < WARN ... 阅读更多

几个 golang 面试题及解析

一、以下代码的输出内容为

答案

解析 考查 defer 和 panic 组合的情况,在有 panic 时,会先执行 defer 然后再把恐慌传递出去。 更多相关内容可查看 defer 常见 ... 阅读更多

Golang 等待组 sync.WaitGroup 的用法

一、 waitgroup 介绍 多线程编程中,经常会遇到这样的一种场景:main 函数中为了等待其他线程执行完,在 return 之前都要执行 sleep 以争取更多的时间给其他线程执行。例如:

主线程为了等待 goroutine 都运行完毕,不得不在 ... 阅读更多

Golang 开发中常见的坑 (一):interface 相关

0x01 以下代码能通过编译吗

不能通过编译,因为类型 man 没有实现 user 接口,实现 say 方法的是*man 类型,两者不能统一。 把 func (p *man) say(hello string) 改成 func (p man) say( ... 阅读更多

Golang 内存逃逸分析

0x01 什么是逃逸 第一次听说逃逸是在雨痕学堂,一脸懵逼的百度了半天也没找到一个明确的说法,直到昨天在论坛上看到一篇关于变量逃逸的文章才明白。 因为函数都是运行在栈上的,在栈声明临时变量分配内存,函数运行完毕再回收该段栈空间,并且每个函数的栈空间都是独立的,其他代码都是不可访问的。但是在某些情况下 ... 阅读更多

Golang 使用 RemoteAddr() 获取远程主机地址的注意事项

一、问题描述 http.Request 下的方法 RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。 使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取 ip,客户端地址都是 127.0.0.1 。 对于这个问题一直百思不得其解,最后搞了半天才发现是 ngin ... 阅读更多

Go pprof 的使用

一、概述 go 的 pprof 工具可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和 CPU 使用的情况统信息进行分析。 官方提供了两个包:runtime/pprof 和 net/http/pprof,前者用于普通代码的性能分析,后者用于 web 服务器的性能分析。 官方文档: https://golan ... 阅读更多