golang实战笔记
文章平均质量分 72
golang实战笔记
翔云123456
这个作者很懒,什么都没留下…
展开
-
go gc信息如何查看
在Go语言中,可以通过设置环境变量和使用运行时包中的调试功能来打印垃圾回收(GC)的信息。原创 2024-08-24 11:34:02 · 838 阅读 · 1 评论 -
如何在Go的函数中得到调用者函数名(caller)
在go语言中,可以通过runtimepackage中 Caller函数获取调用者信息Caller举个例子outputskip 0, caller就是test1skip 1, caller就是test2skip 1, 一个新goroutine执行 test1,caller就是。原创 2023-03-28 21:02:20 · 781 阅读 · 0 评论 -
为什么在连接mysql时,设置 SetConnMaxIdleTime 没有作用
在使用golang 连接 mysql时,为了节省连接资源,在连接使用过后,希望在指定长度时间不再使用后,自动关闭连接。这时,经常会使用,设置最大连接有效时间,使用,设置最大空闲连接时间 max idle time。这两个函数的作用听起来差不多,理论上,都能达到相同效果。但是在实际使用中,却有些出人意料。首先看下测试代码,在以下代码中,设置 max idle time 为传入的参数值,设置 max life time 为传入的参数值,设置 max open conn 为1,原创 2023-02-25 22:08:02 · 1589 阅读 · 0 评论 -
golang 连接mysql 的时间参数loc, parseTime
在使用golang连接MySQL的时候,经常会用到和。这两个参数的作用是什么呢?先说下不带这两个参数存在的问题:下面看下这两个参数。如果配置了,MySQL中的、等时间类型字段将自动转换为golang中的类型。 类似的 ,会被转为的零值。否则,如果没有配置或配置了, 只会转为 / 。设置转换为 类型时, 使用的时区信息 (当设置parseTime=true)。默认值 ,表示解析为UTC时间。一般设置为,表示使用当地时间。这个设置只表示解析为类型时,使用的配置。原创 2022-04-30 23:05:18 · 6892 阅读 · 0 评论 -
golang 哪些类型可以作为map key
在golang 中,我们已经熟知的可以作为map key 的类型有 string, int。那还有哪些类型可以作为key,哪些类型不可以呢?本文对此做下简单介绍。在golang规范中,可比较的类型都可以作为map key,包括:类型说明boolean 布尔值numeric 数字包括整型、浮点型,以及复数string 字符串pointer 指针两个指针类型相等,表示两指针指向同一个变量或者同为nilchannel 通道两个通道类型相等,表示两个通道原创 2022-03-26 22:52:16 · 10472 阅读 · 0 评论 -
如何查看golang程序中有哪些goroutine 正在执行
查看 正在执行的goroutine分两步:1.程序中引入pprof pakage在程序中引入pprof package:import _ "net/http/pprof"程序中开启HTTP监听服务:package mainimport ( _ "net/http/pprof" "net/http")func main() { go func() { log.Println(http.ListenAn原创 2020-06-27 16:42:13 · 9190 阅读 · 0 评论 -
golang程序性能分析
pprof和trace 是golang程序性能分析中经常用到的两个工具。本文简单介绍其使用方法。1.程序中引入pprof package对于长期运行的的后台程序来说,使用package net/http/pprof 是比较便捷的选择。使用方法非常简单,只要import package的地方加上:import _ "net/http/pprof"就可以使用提供的接口包括:"/debug/pprof/""/debug/pprof/cmdline""/debug/pprof/profile"原创 2020-06-27 16:30:41 · 4098 阅读 · 0 评论 -
go module 使用举例
在go语言,从1.11开始,引入module,进行版本管理。通过使用module,工程目录的位置不用必须放在GOPATH下。本文介绍 module的使用。下文中用的Go版本是1.13。1. go mod命令通过go mod可以进行modules的相关操作。首先看下 go mod命令:$ go help modGo mod provides access to operations ...原创 2019-12-22 17:56:43 · 343 阅读 · 0 评论 -
golang 故障模拟工具failpoint的使用
测试是功能上线之前的重要环节。测试过程中,要尽量覆盖各种场景。故障情况或异常情况下的场景测试,也是必不可少的。如何模拟故障呢?在FreeBSD 中, failpoints经常用来模拟故障。在golang,也有failpoint的实现,就是目前pingcap 公司的开源项目failpoint.下面介绍golang中的failpoint的实现。1.安装failpoint工具cd $GO...原创 2019-11-15 20:09:27 · 1761 阅读 · 0 评论 -
Golang 空指针nil的方法和数据成员
golang中,有一个特殊的指针值nil.如何使用nil没有方法和成员变量呢?下面来看下具体例子。程序中,定义结构体类型Plane, 将Plane类型的指针作为函数的参数,然后传入nil作为实参。在函数中,使用nil访问Plane的方法。package mainimport ( "fmt")type Plane struct { Num int...原创 2019-10-17 22:49:40 · 3179 阅读 · 0 评论 -
golang channel关闭后,是否可以读取剩余的数据
golang channel关闭后,其中剩余的数据,是可以继续读取的。请看下面的测试例子。创建一个带有缓冲的channel,向channel中发送数据,然后关闭channel,最后,从channel中读取数据,输出结果。package mainimport ( "fmt")func main(){ ch := make(chan int, 3)...原创 2019-08-03 21:13:29 · 17409 阅读 · 7 评论 -
golang 开源项目: 配置解析模块--config
在golang中,配置文件经常使用json格式。json格式的语法,有些繁琐,尤其是出现嵌套的时候,每一块都需要大括号包裹,看起来很臃肿。本着简单易用的原则,个人开发了一个配置解析库kitty,已在github开源。下面介绍配置解析库kitty的语法和使用方法。基本语法基本字符定义如下:# 注释= key=value, 赋值[] 区域,可以表示一个结构体[[]] 区域...原创 2019-07-21 16:12:22 · 1168 阅读 · 0 评论 -
golang 通过reflect反射修改值
不是所有的反射值都可以修改。对于一个反射值是否可以修改,可以通过CanSet()进行检查。要修改值,必须满足:可以寻址, 可寻址的含义:slice的元素可寻址的数组的元素(指向数组的指针)可寻址的结构体的字段(指向结构体的指针)指针指向的具体元素不是结构体没有导出的字段1.指针指向的具体元素需要两步:取地址:v := reflect.ValueOf(&...原创 2019-07-09 21:02:02 · 9163 阅读 · 0 评论 -
golang defer 延后执行什么
对于golang的defer,我们已经知道,defer定义的语句可以延后到函数返回时执行。经常用在文件的关闭,锁的释放等场景中。而且defer定义的语句即使遇到panic也会执行。这样,可以执行必要的清理工作,甚至使用recover()捕获异常。以前使用defer经常这样用:defer close()或者defer func(){ //do something...}()...原创 2019-06-18 19:06:22 · 362 阅读 · 0 评论 -
golang tcp keepalive实践
前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive。目前golang net包不提供TCP keep alive 开始探测时间、 探测总次数直接设置。使用第三方包,方便设置开始探测时间、探测时间间隔、探测总次数。1.下载第三方包git clone git@github.com:felixge/tcpkeepalive....原创 2019-05-26 22:39:46 · 4804 阅读 · 0 评论 -
golang context学习记录2
go原创 2019-05-19 18:29:56 · 326 阅读 · 0 评论 -
golang context学习记录1
1.前言一个请求,可能涉及多个API调用,多个goroutine,如何在多个API 之间,以及多个goroutine之间协作和传递信息,就是一个问题。比如一个网络请求Request,需要开启一些goroutine去访问后端资源(比如,数据库,RPC服务等),这些goroutine又可能会开启其他的goroutine,如何跟踪和控制这些goroutine呢?golang定义了 context包...原创 2019-05-19 18:15:31 · 420 阅读 · 0 评论 -
golang RPC通信读写超时设置
golang RPC通信中,有时候就怕读写hang住。那是否可以设置读写超时呢?1.方案一: 设置连接的读写超时1.1 client可参考golang网络通信超时设置–读写超时部分1.2 server通常情况下,RPC server端的代码如下: server := rpc.NewServer() ... .... for { conn, err := l.Ac...原创 2019-05-12 21:53:35 · 2601 阅读 · 0 评论 -
golang网络通信超时设置
网络通信中,为了防止长时间无响应的情况,经常会用到网络连接超时、读写超时的设置。本文结合例子简介golang的连接超时和读写超时设置。1.超时设置1.1 连接超时func DialTimeout(network, address string, timeout time.Duration) (Conn, error) 第三个参数timeout可以用来设置连接超时设置。如果超过time...原创 2019-05-12 16:47:20 · 17436 阅读 · 0 评论 -
golang gRPC初探
gRPC使用protocol buffers作为Interface Definition Language (IDL)。gRPC的底层信息交互格式也使用的是protocol buffers。默认情况下,gRPC使用protocol buffers进行序列结构化数据。protocol buffers是Google 序列化数据的成熟开源方案。gRPC支持的很多种语言,例如C++, Java, ...原创 2019-05-04 23:03:44 · 533 阅读 · 0 评论 -
HTTP 客户端接收数据超时
本文使用两种方式测试HTTP 客户端读数据超时的情况,一种是直接使用golang自带的http库,另一种是使用martini web框架。1. 测试1–直接使用http库1.1.启动serverserver端的请求响应函数,会睡眠10s,再返回结果。这样,可以模拟server端处理慢的情况。package mainimport ( "log" "net...原创 2019-04-13 21:34:32 · 1423 阅读 · 0 评论 -
TCP连接异常:broken pipe 和EOF
本文介绍3种TCP连接异常的情况。1.server没有启动,client尝试连接./clientdial failed: dial tcp 127.0.0.1:8080: connect: connection refused通过tcpdump抓包,可以看到当server没有启动的时候,client向server8080端口发送数据后,client端会收到RST。2.client 读数...原创 2019-04-13 21:09:34 · 23136 阅读 · 0 评论 -
golang defer那些坑
defer以下几个特性,使用时需要关注下。即时的参数传递调用os.Exit()时defer不会被执行defer与return的先后顺序1.即时的参数传递定义defer时传入的参数,是作为拷贝传递的。也就是说,如果原来的变量值发生变化,不会影响传给defer的参数。例子如下:package mainimport ( "fmt")func main(){...原创 2019-06-23 20:49:06 · 1254 阅读 · 0 评论 -
golang reflect 简单使用举例
golang中的多态,主要由接口interface体现。接口interface在实现上,包括两部分:动态类型和动态值。golang提供的reflect包可以用来查看这两部分。动态类型func TypeOf(i interface{}) Type返回i的动态类型。动态值func ValueOf(i interface{}) Value返回i存放的动态值。下面举例说明。pack...原创 2019-07-03 21:00:34 · 345 阅读 · 0 评论 -
golang 使用reflect反射结构体
"反射结构体"是指在程序执行时,遍历结构体中的字段以及方法。1.反射结构体下面使用一个简单的例子说明如何反射结构体。定义一个结构体,包括3个字段,以及一个方法。通过reflect包,首先查看这个结构体对应的动态类型reflect.Type和动态值reflect.Value,并查看这个结构体对应的基本类型。接着查看结构体的字段数量,并遍历每个字段。打印每个字段的类型、值、以及tag标签。...原创 2019-07-06 18:35:06 · 3288 阅读 · 0 评论 -
golang 性能剖析pprof
作为一个golang coder,使用golang编写代码是基本的要求。能够写出代码,并能够熟悉程序执行过程中各方面的性能指标,则是更上一层楼。如果在程序出现性能问题的时候,可以快速定位和解决问题,那么写起代码来,会更加自信。本文介绍的pprof,是golang 自带性能剖析工具,可以帮助定位程序中可能存在的问题。1.引入pprof例子代码如下:package mainimport...原创 2019-09-21 16:25:17 · 2532 阅读 · 0 评论