Tag:

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

我在Go中创build一个URL获取器,并获取要获取的URL列表。 我发送http.Get()请求到每个URL并获得他们的回应。 resp,fetch_err := http.Get(url) 我如何设置每个Get请求的自定义超时? (默认时间非常长,这使得我的fetcher真的很慢。)我希望我的fetcher有大约40-45秒的超时时间,之后它应该返回“请求超时”并转到下一个URL。 我怎样才能做到这一点?

在Go程序中捆绑静态资源的最佳方式是什么?

我在Go上开发一个小型的Web应用程序,这个应用程序可以在开发人员的机器上作为一个工具来帮助debugging他们的应用程序/ Web服务。 程序的接口是一个不仅包含HTML,还包含一些JavaScript(用于function),图像和CSS(用于样式)的网页。 我正在计划开源这个应用程序,所以用户应该能够运行一个Makefile,所有的资源都将到达他们需要去的地方。 不过,我也希望能够尽可能less的文件/依赖关系来分发可执行文件。 有没有一种很好的方法来捆绑HTML / CSS / JS与可执行文件,所以用户只需要下载并担心一个文件? 现在,在我的应用程序中,提供静态文件看起来有点像这样: // called via http.ListenAndServe func switchboard(w http.ResponseWriter, r *http.Request) { // snipped dynamic routing… // look for static resource uri := r.URL.RequestURI() if fp, err := os.Open("static" + uri); err == nil { defer fp.Close() staticHandler(w, r, fp) return } // snipped blackhole route […]

从范围循环内的Golang映射中删除选定的键是否安全?

如何从Golang地图中删除选定的密钥? 在下面的代码中将delete()和range结合起来是否安全? http://play.golang.org/p/u1vufvEjSw package main import "fmt" type Info struct { value string } func main() { table := make(map[string]*Info) for i := 0; i < 10; i++ { str := fmt.Sprintf("%v", i) table[str] = &Info{str} } for key, value := range table { fmt.Printf("deleting %v=>%v\n", key, value.value) delete(table, key) } }

从结构中删除字段或将其隐藏在JSON响应中

我在Go中创build了一个API,在被调用的时候,执行一个查询,创build一个结构的实例,然后在返回给调用者之前将结构编码为JSON。 我现在想允许调用者能够通过传递“fields”GET参数来select他们想返回的特定字段。 这意味着取决于字段的值,我的结构会改变。 有没有办法从结构中删除字段? 或者至lessdynamic地将它们隐藏在JSON响应中? (注意:有时我有空值,所以JSON omitEmpty标签将不能在这里工作)如果这些都不可能,是否有更好的方法来处理这个问题的build议? 提前致谢。 下面是我使用的较小版本的结构: type SearchResult struct { Date string `json:"date"` IdCompany int `json:"idCompany"` Company string `json:"company"` IdIndustry interface{} `json:"idIndustry"` Industry string `json:"industry"` IdContinent interface{} `json:"idContinent"` Continent string `json:"continent"` IdCountry interface{} `json:"idCountry"` Country string `json:"country"` IdState interface{} `json:"idState"` State string `json:"state"` IdCity interface{} `json:"idCity"` City string `json:"city"` } //SearchResult type […]

有没有办法在Golang中迭代整个范围?

Golang的范围可以遍历地图和切片,但是我想知道是否有一种方法来迭代一系列数字,像这样 for i := range [1..10] { fmt.Println(i) } 或者有没有一种方法来表示整数的范围像ruby一样呢?

如何有效地使用Go下载大文件?

有没有办法使用Go下载一个大文件,直接将内容存储到一个文件中,而不是将它存储在内存中,然后再写入文件? 由于文件太大,在将文件写入文件之前将其全部存储在内存中将耗尽所有的内存。

声明一个常量数组

我努力了: const ascii = "abcdefghijklmnopqrstuvwxyz" const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 } const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 } const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 } 首先,声明和初始化工作正常,但第二,第三和第四个不起作用。 我如何声明和初始化浮点数的const数组?

如何在结构体中定义多个名称标签

我需要从mongo数据库中获取项目,所以我定义了一个像这样的结构 type Page struct { PageId string `bson:"pageId"` Meta map[string]interface{} `bson:"meta"` } 现在我也需要将其编码为JSON,但它将字段编码为大写(我得到PageId而不是pageId),所以我还需要为JSON定义字段标记。 我尝试了这样的事情,但没有奏效: type Page struct { PageId string `bson:"pageId",json:"pageId"` Meta map[string]interface{} `bson:"meta",json:"pageId"` } 那么如何做到这一点,在结构中定义多个名称标签呢?

将Go结构转换为JSON

我正在尝试使用json包将Go结构转换为JSON,但是我所得到的是{} 。 我确定这是完全明显的,但是我没有看到。 package main import ( "fmt" "encoding/json" ) type User struct { name string } func main() { user := &User{name:"Frank"} b, err := json.Marshal(user) if err != nil { fmt.Printf("Error: %s", err) return; } fmt.Println(string(b)) } 然后当我尝试运行它我得到这个: $ 6g test.go && 6l -o test test.6 && ./test {}

如何收听N频道? (dynamicselect语句)

开始执行两个goroutines的无限循环,我可以使用下面的代码: 收到味精后,将开始一个新的goroutine,并永远继续下去。 c1 := make(chan string) c2 := make(chan string) go DoShit(c1, 5) go DoShit(c2, 2) for ; true; { select { case msg1 := <-c1: fmt.Println("received ", msg1) go DoShit(c1, 1) case msg2 := <-c2: fmt.Println("received ", msg2) go DoShit(c2, 9) } } 现在我想对N个例程有相同的行为,但在这种情况下select语句将如何查找? 这是我开始使用的代码,但是我很困惑如何编写select语句 numChans := 2 //I keep the channels in this […]