go

Specify timeout when tracing HTTP request in Go

孤者浪人 提交于 2021-02-19 01:59:54
问题 I know the usual method of specifying a timeout with HTTP requests by doing: httpClient := http.Client{ Timeout: time.Duration(5 * time.Second), } However, I can't seem to figure out how to do the same when tracing HTTP requests. Here is the piece of code I am working with: func timeGet(url string) (httpTimingBreakDown, error) { req, _ := http.NewRequest("GET", url, nil) var start, connect, dns, tlsHandshake time.Time var timingData httpTimingBreakDown timingData.url = url trace := &httptrace

Go环境搭建

|▌冷眼眸甩不掉的悲伤 提交于 2021-02-19 01:44:52
安装 Go Go语言的优劣,这里就不介绍了,下面直接讲Go 的安装: Go 的官方网站 : http://golang.org/ (需要翻墙软件) 国内下载地址 : http://www.golangtc.com/download 下载对应平台的安装包。注意区分32位还是64位操作系统。 安装包下载完成之后,安装过程很简单,傻瓜式下一步到底就好了。 Go 环境变量 安装go 的时候,安装程序会自动把相关目录写到系统环境。但是如果是zip 的安装,需要自己手动添加。 主要配置以下几个: GOROOT:Go 安装后的根目录(例如:D:\Go),安装过程中会由安装程序自动写入系统环境变量中。 GOBIN:Go 的二进制文件存放目录(%GOROOT%\bin) PATH:需要将 %GOBIN% 加在 PATH 变量的最后,方便在命令行下运行。 当环境变量都配置完成之后,Go 就已经安装完毕了。打开命令行,运行 go 命令,就可以看到如下的提示了。 Go 工作空间 GOPATH : Go 的工作空间,就是我们的开发和依赖包的目录(例如:我的是 D:\Go_Path\go) ,此目录需要手动配置到系统环境变量 GOPATH 工作空间是一个目录层次结构,其根目录包含三个子目录: src:包含 Go 源文件,注意:你自己创建依赖的package,也要放到GOPATH 目录下,这样才能够被引用到。

How to use rows.Scan of Go's database/sql

邮差的信 提交于 2021-02-19 01:32:11
问题 I use database/sql and define a struct mapping to DB table columns(tag field): // Users ... type Users struct { ID int64 `field:"id"` Username string `field:"username"` Password string `field:"password"` Tel string `field:"tel"` } then I query: rows, err := db.Query(sql) // select * from users if err != nil { fmt.Println(err) } defer rows.Close() for rows.Next() { user := new(Users) // works but I don't think it is good code for too many columns err = rows.Scan(&user.ID, &user.Username, &user

How to use rows.Scan of Go's database/sql

三世轮回 提交于 2021-02-19 01:32:08
问题 I use database/sql and define a struct mapping to DB table columns(tag field): // Users ... type Users struct { ID int64 `field:"id"` Username string `field:"username"` Password string `field:"password"` Tel string `field:"tel"` } then I query: rows, err := db.Query(sql) // select * from users if err != nil { fmt.Println(err) } defer rows.Close() for rows.Next() { user := new(Users) // works but I don't think it is good code for too many columns err = rows.Scan(&user.ID, &user.Username, &user

GRPC Connection Management in Golang

一世执手 提交于 2021-02-18 22:11:48
问题 I am relatively new to GRPC and want to be sure that I am doing connection management correctly with golang. I don't want to have to create a new connection for every call but I also don't want to create bottlenecks as I scale. What I did was to create a single connection in the init function: var userConn *grpc.ClientConn var userServiceName string func init() { userServiceName := os.Getenv("USER_SERVICE_URL") if userServiceName == "" { userServiceName = "localhost" } logging.LogDebug(

What are Go example functions?

99封情书 提交于 2021-02-18 21:58:26
问题 The Go testing package mentions example functions as in: func Example() { ... } func ExampleF() { ... } func ExampleT() { ... } func ExampleT_M() { ... } What is the meaning and use case for these? 回答1: Example functions are usage examples of a package or functions or other code you're documenting. Example functions will be included in the generated godoc in source form (while other functions are not), with proper formatting, also some processing applied, for example if last line of the

Windows下fabric sdk连接Linux上fabric网络的调试过程

不打扰是莪最后的温柔 提交于 2021-02-18 20:59:36
上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台。团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工具JetBrains GoLand也就直接在桌面版的虚拟机里面安装。而我因为之前比较习惯使用Vagrant + VirtualBox的方式快速加载我定制版的Ubuntu镜像从而创建Linux开发环境,这样一来的弊端就是我只能通过命令行来进行一切操作而没有桌面可操作,所以我的整个开发IDE就在本机的windows上进行。 我们的Fabric网络是采用的Docker方式启动,作为自己本地的测试环境自然就将网络搭建在Ubuntu虚拟机里面,前期由其它小组成员负责针对Go语言版本的SDK(Hyperledger子项目fabric-sdk-go)进行封装调用并利用Beego作为服务器将相应的API暴露出来,而我负责的便是将他们暴露出来的API进一步封装为标准Go版的SDK,所谓的标准就是对调用者而言无感是调用的区块链。这个时候问题就出现了,在我写SDK的过程中用单元测试对他们的API发起Http请求调用时一脸懵逼,观察Beego服务器打印的日志信息少的可怜几乎没有

How does one use a variable name with the same name as a package in Go?

偶尔善良 提交于 2021-02-18 20:32:12
问题 A common variable name for files or directories is "path". Unfortunately that is also the name of a package in Go. Besides, changing path as a argument name in DoIt, how do I get this code to compile? package main import ( "path" "os" ) func main() { DoIt("file.txt") } func DoIt(path string) { path.Join(os.TempDir(), path) } The error I get is: $6g pathvar.go pathvar.go:4: imported and not used: path pathvar.go:13: path.Join undefined (type string has no field or method Join) 回答1: The path

2019,Go fighting on my coding way!

烈酒焚心 提交于 2021-02-18 18:31:09
2018是让我想去回忆却不堪回忆的一年。 这一年我经历了高考的洗礼,来到了计算机系;却又经历了算法的“折磨”,在沮丧和自我怀疑中走上了“思而不学则殆”的错误道路。 想想自己,课上老师讲解算法就没有听懂,课下也没有花时间琢磨消化,而作业做不出来百度和请教学长以后也没有进行任何总结,当然,课外也没有在洛谷和leetcode上刷任何题目。空谈算法的重要性,空抱怨自己不行,却没有想办法解决自己逻辑思维不清晰的问题。换言之,陷入了消极备战的状态。 在学期的后期,我接连学习了回溯,分治,贪心,动规,深搜和广搜。可以说,这几种算法是我们计算机系大一学生最应该掌握的几种基本算法了。如果这些都不能好好掌握,那么大二的数据结构又应该何从谈起?那我以后还在这个系如何有颜面混下去?编程能力和逻辑能力都不佳,那我究竟能够从计算机系获得什么能力? 上大学之前和大一上学期,我一直有一种错误的认识,就是大学还和高中一样,老师不仅负责引路,还负责把我们每个人都教会。现在发现不是的。更多时候,师父领进门修行在个人。关键是,对于算法,上课的那点时间,老师只能浮于表面,纯粹是介绍有这么一种算法,距离我们真正学会应用,还差得远呢!而OJ上的题目也特别基本,仅仅通过你的作业题,怎么可能熟练地掌握算法知识的要义!(就连基本的类型都不全) 到了学期末,我才发现我的同学们,不是在课外OJ上刷题就是在钻研算法竞赛的书,比如紫书。

Context package vs done channel to avoid goroutine leak

北慕城南 提交于 2021-02-18 16:21:31
问题 There are two different approaches to clean up a goroutine. Use a kill channel to signal cancellation and a done channel to indicate that goroutine has been terminated. type Worker struct { Done chan struct{} Kill chan struct{} Jobs chan Job } func (w *Worker) Run() { defer func() { w.Done <- struct{}{} } for { select { case <-w.Kill: return case j := <-w.Jobs: // Do some work } } go w.Run() w.Kill <- struct{}{} Use context to cancel type Worker struct { Ctx context.Context Cancel context