小编pym*_*ymd的帖子

如何在Golang中为http.Get()请求设置超时?

我在Go中创建一个URL提取器,并有一个要获取的URL列表.我向http.Get()每个URL 发送请求并获取其响应.

resp,fetch_err := http.Get(url)
Run Code Online (Sandbox Code Playgroud)

如何为每个Get请求设置自定义超时?(默认时间很长,这使得我的提取器非常慢.)我希望我的提取器有超过40-45秒的超时时间,之后它应该返回"请求超时"并继续下一个URL.

我怎样才能做到这一点?

timeout get http go

91
推荐指数
6
解决办法
8万
查看次数

如何在golang中实现基于级别的日志记录?

在golang中是否有可用于基于级别的日志记录的好包装器?如果没有,我应该如何自己实施?

我想要的很简单.我想要一些功能,例如

log.Error()
log.Info()
Run Code Online (Sandbox Code Playgroud)

等等,它们将输出显示给stdout,并将它们保存在日志文件中(基于作为命令行参数给予程序的级别).我如何实现这个包装器?

logging go

45
推荐指数
4
解决办法
5万
查看次数

如何使用golang的"compress/gzip"包来压缩文件?

我是golang的新手,无法弄清楚如何使用golang的"compress/gzip"软件包.基本上,我只是想写一些文件,gzip并直接从压缩格式通过另一个脚本读取它.如果有人能给我一个如何做到这一点的例子我真的很感激.

compression file-io gzip go

28
推荐指数
4
解决办法
3万
查看次数

如何让"godoc"命令在我的系统上运行?

"godoc"并不适用于我的系统.(我使用的是ubuntu 13.04)

godoc fmt
Run Code Online (Sandbox Code Playgroud)

出现以下错误

2013/06/08 19:12:43 readTemplate: open /usr/lib/go/lib/godoc/codewalk.html: no such file or directory
Run Code Online (Sandbox Code Playgroud)

"哪个去"给出:

/usr/bin/go
Run Code Online (Sandbox Code Playgroud)

"go env"给出以下内容:

GOROOT="/usr/lib/go"
GOBIN=""
GOARCH="386"
GOCHAR="8"
GOOS="linux"
GOEXE=""
GOHOSTARCH="386"
GOHOSTOS="linux"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_386"
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread"
CGO_ENABLED="1"
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让它发挥作用?

ubuntu environment-variables go

14
推荐指数
5
解决办法
1万
查看次数

多个文件包如何在golang中运行?

这个 repo有3个go文件都以"package lumber"开头.要使用这个包,我应该把它放在我的GOROOT简单

import lumber
Run Code Online (Sandbox Code Playgroud)

在我的程序中.此包中的变量和类型如何跨多个文件相互连接?go编译器如何知道首先要读取哪个文件?

如果我想阅读包,我应该在哪里开始阅读以了解包装?这里的事情到底是什么?

flow package go

12
推荐指数
2
解决办法
1万
查看次数

使用channel.Get()而不是channel.Consume()有缺点吗?

我正在使用streadway的amqp库来连接rabbitmq服务器.该库提供了一个channel.Consume()函数,它返回一个" < - chan Delivery ".它还提供了一个channel.Get()函数,它返回一个" Delivery "等.

我要实现pop()功能,我正在使用channel.Get().但是,文档说:

"In almost all cases, using Channel.Consume will be preferred."
Run Code Online (Sandbox Code Playgroud)

这里的首选是否意味着推荐?使用channel.Get()而不是channel.Consume()有什么缺点吗?如果是,我如何使用channel.Consume()来实现Pop()函数?

amqp go rabbitmq

8
推荐指数
2
解决办法
3303
查看次数

map [string] interface {}在golang中映射[string]字符串的速度是否更快?或"strconv"功能太慢?

我在golang做一个url fetcher.我是新来golang,不知道interace {}前面键入并因此使用map[string]string我的args_hash {} (一般哈希参数传递给我的提取程序例如time,date,site-path等).但是,我后来才知道interface{}类型并改变了我map的意思map[string]interface{}.

我的fetcher里面有各种各样的功能args_hash{}.早些时候,我不得不转换应该是整数的args(但由于使用和的整数限制而传递为字符串. 例如map[string]string)strconv.Atoi()stuff

func my_def(args_hash{} map[string]string){
    url_count := strconv.Atoi(args_hash["url_count"])
   // ... use url count
    .
    .
   // ......successful url count calculated
   args_hash["success_url_count"] = strconv.Itoa(success_count)
}
Run Code Online (Sandbox Code Playgroud)

我的方法提前几次做了这个,并且args_hash{}在它们之间多次修改了它.

但从现在开始我转向使用

args_hash map[string]interface{}
Run Code Online (Sandbox Code Playgroud)

我不再这样做了.

使用时map[string]string,获取10个特定网址的时间约为23秒,但是map[string]interface{}这已减少到接近一半(约12-13秒).

可能是什么原因?

interface map go

3
推荐指数
1
解决办法
4621
查看次数

哪一个更适合我使用:"defer-panic-recover"或检查golang中的"if err!= nil {// dosomething}"?

我做了一个大型程序,打开和关闭文件和数据库,执行写入和读取等等.由于没有"go中的异常处理"这样的事情,并且由于我并不真正了解"defer"语句和"recover()"函数,所以我在每次文件打开,读写,数据库输入后应用了错误检查等等

_,insert_err := stmt.Run(query)
if insert_err != nil{
    mylogs.Error(insert_err.Error())
    return db_updation_status
}
Run Code Online (Sandbox Code Playgroud)

为此,我在开头将db_updation_status定义为"false",并且在程序中的所有内容都正确之前不要将其设置为"true".在我认为可能出错的每次操作之后,我在每个功能中都这样做了.

你认为使用延迟 - 恐慌恢复有更好的方法吗?我在这里阅读了这些http://golang.org/doc/articles/defer_panic_recover.html,但无法清楚地了解如何使用它们.这些构造是否提供类似于异常处理的东西?没有这些结构,我会更好吗?如果有人能用一种简单的语言向我解释这个问题,并且/或者为这些结构提供一个用例并将它们与我上面使用的错误处理类型进行比较,我将非常感激.

error-handling go panic

3
推荐指数
1
解决办法
998
查看次数

如何启用/禁用特定的图形卡?

我正在研究一台"fujitsu"机器.它安装了2个GPU:Quadro 2000和Tesla C2075.Quadro GPU有1 GB RAM,Tesla GPU有5GB.(我使用nvidia-smi -q的输出检查).当我运行nvidia-smi时,输出显示2个GPU,但特斯拉显示屏显示为关闭.我正在运行一个内存密集型程序,并希望使用5 GB的RAM,但每当我运行程序时,它似乎都在使用Quadro GPU.有没有办法在程序中使用2中的特定GPU?特斯拉GPU是否被"禁用"意味着它的驱动程序没有安装?

cuda gpu nvidia

2
推荐指数
1
解决办法
3895
查看次数

如何在golang中创建一个自动调用的结构方法?

我必须在golang中创建类似于2级继承的替代品,即在包中,我有一个结构(A),它由另一个包中的另一个结构(B)继承(嵌入为匿名字段),其目标是由" "包使用.

现在,我为"B"(BPlease)创建了一个初始化方法,该方法返回B的对象(比如B_obj).我可以在程序开始时从我的"main"包中调用这个初始化程序(BPlease).

"B"(比如,HelloB())的方法之一,在执行期间使用"B"对象调用"A"(例如,HelloA())方法.

但我真正想要的是,类似于"A"的构造函数,可以初始化其字段(最好是在B_obj在包"main"中创建),然后"B"调用任何"A"方法.

怎么做到这一点?

我尝试为"A" 创建一个初始化程序(APlease)并调用它(BPlease)来获取"A"(A_obj)的对象.但我发现这个对象没用,因为我无法在"B"(HelloB())方法中使用它来调用"A"方法(HelloA()).如果有人能告诉我如何利用这个对象(A_obj)会很棒.

这里有一些代码来澄清我的查询:

    package A
    type A struct { whatever }
    func (A_obj *A) HelloA(){performs some operation...}           // a method of A()
    func APlease() A {
          return A{initialize A fields}
        }
-------------------------------------------------------------------------------
    package B
    type B struct {
      A
      B fields
    }

    func BPlease() B {
      return B{
      A_obj := APlease()                     // useless to me.... …
Run Code Online (Sandbox Code Playgroud)

oop constructor structure initialization go

1
推荐指数
1
解决办法
3494
查看次数