解决 gvm 工具无法下载安装包的问题
GVM(Go Version Manager) 是一款用于管理和切换不同 Go 语言版本的工具。它允许用户在同一台计算机上轻松安装、使用和管理多个 Go 版本,同时还能确保项目之间的依赖关系井然有序。 GVM 的主要功能包括: - 安装和卸载 Go 版本:GVM 允许用户快速安装和卸载 Go 语言的不同版本,以便在不同项目 ... 阅读更多
GVM(Go Version Manager) 是一款用于管理和切换不同 Go 语言版本的工具。它允许用户在同一台计算机上轻松安装、使用和管理多个 Go 版本,同时还能确保项目之间的依赖关系井然有序。 GVM 的主要功能包括: - 安装和卸载 Go 版本:GVM 允许用户快速安装和卸载 Go 语言的不同版本,以便在不同项目 ... 阅读更多
默认情况下,goland(jetbrains 家的软件:idea 、 pycharm 、 phpstorm 以及 webstorm 都是一样) 安装 protobuf 插件后只会在一个特定的库路径下搜索 proto 文件。如果自定义了公共的头文件,导入的时候 goland 无法自动识别出来,显示无法解析 proto 文件 (报错为 「C ... 阅读更多
一、简介 go module 公共代理仓库,代理并缓存 go 模块。你可以利用该代理来避免 DNS 污染导致的模块拉取缓慢或失败的问题,加速你的构建。 简单来说就是国内访问被墙,go get 无法在线获取到仓库,代理仓库就是帮我们解决这个问题的。 二、使用方法 使用 go1.11 以上版本并开启 go module 机 ... 阅读更多
一、关于 glog 库 golang 中的 glog 库是 google 著名开源 C++日志库 glog 的 golang 版本,在 golang 默认日志库的基础上做了更进一层的封装使得该库能更贴近日常使用。项目首页为 golang/glog,当前版本的 glog 有以下几个特点: 支持四种日志级别:INFO < WARN ... 阅读更多
一、以下代码的输出内容为
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() panic("触发异常") } |
答案
|
1 2 3 4 |
打印后 打印中 打印前 panic: 触发异常 |
解析 考查 defer 和 panic 组合的情况,在有 panic 时,会先执行 defer 然后再把恐慌传递出去。 更多相关内容可查看 defer 常见 ... 阅读更多
一、 waitgroup 介绍 多线程编程中,经常会遇到这样的一种场景:main 函数中为了等待其他线程执行完,在 return 之前都要执行 sleep 以争取更多的时间给其他线程执行。例如:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import ( "fmt" "time" ) func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second) } |
主线程为了等待 goroutine 都运行完毕,不得不在 ... 阅读更多
0x01 以下代码能通过编译吗
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import "fmt" type user interface { say(string) } type man struct{} func (p *man) say(hello string) { fmt.Println(hello) } func main() { var u user = man{} u.say("Hello World") } |
不能通过编译,因为类型 man 没有实现 user 接口,实现 say 方法的是*man 类型,两者不能统一。 把 func (p *man) say(hello string) 改成 func (p man) say( ... 阅读更多
0x01 什么是逃逸 第一次听说逃逸是在雨痕学堂,一脸懵逼的百度了半天也没找到一个明确的说法,直到昨天在论坛上看到一篇关于变量逃逸的文章才明白。 因为函数都是运行在栈上的,在栈声明临时变量分配内存,函数运行完毕再回收该段栈空间,并且每个函数的栈空间都是独立的,其他代码都是不可访问的。但是在某些情况下 ... 阅读更多
一、问题描述 http.Request 下的方法 RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。 使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取 ip,客户端地址都是 127.0.0.1 。 对于这个问题一直百思不得其解,最后搞了半天才发现是 ngin ... 阅读更多
一、概述 go 的 pprof 工具可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和 CPU 使用的情况统信息进行分析。 官方提供了两个包:runtime/pprof 和 net/http/pprof,前者用于普通代码的性能分析,后者用于 web 服务器的性能分析。 官方文档: https://golan ... 阅读更多