Tag:

如何使用httptesttestinghttp调用

我有以下代码: package main import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "time" ) type twitterResult struct { Results []struct { Text string `json:"text"` Ids string `json:"id_str"` Name string `json:"from_user_name"` Username string `json:"from_user"` UserId string `json:"from_user_id_str"` } } var ( twitterUrl = "http://search.twitter.com/search.json?q=%23UCL" pauseDuration = 5 * time.Second ) func retrieveTweets(c chan<- *twitterResult) { for { resp, […]

Golang在子目录中进行testing

我想在Go中创build一个包,将包的testing和例子作为子目录来保持工作区的清洁。 这是可能的,如果是这样的话? 所有的文档总是把testing代码放在与其他代码相同的地方,这在某种程度上更好还是只是惯例? 谢谢。

在Go中将float64转换为int

在Go中,如何将float64转换为int? 我知道strconv包可以用来将任何内容转换为string或从string中转换,但不能在数据types之间转换。 我知道我可以使用fmt.Sprintf将任何东西转换为string,然后strconv到我需要的数据types,但是这个额外的转换看起来有点笨拙 – 有没有更好的方法来做到这一点?

为什么在Go中很less使用列表?

我对Go很陌生,对此很兴奋。 但是,在所有我已经广泛使用的语言中:Delphi,C#,C ++,Python – 列表非常重要,因为它们可以dynamicresize,而不是数组。 在Golang中,确实有一个list.List结构体,但是我看不到有关它的文档 – 无论是在Go By Example还是三个Go书(Summerfield,Chisnal和Balbaert)中,他们都花费了大量的时间然后切片,然后跳到地图。 在souce代码的例子中,我也很less或没有使用list.List 。 它似乎也不像Python, Range不支持List – 大缺点IMO。 我错过了什么吗? 切片当然是很好的,但他们仍然需要基于硬编码大小的arrays。 这就是List进来的地方。有没有一种方法可以在Go中创build一个数组/片段而不需要硬编码的数组大小? 为什么列表被忽略?

用标准的http包显示自定义的404错误页面

假设我们有: http.HandleFunc("/smth", smthPage) http.HandleFunc("/", homePage) 用户在尝试错误的URL时看到一个普通的“404页面未find”。 我怎样才能返回一个自定义页面? 更新有关大猩猩/多路复用器 对于那些使用纯净/ http包的人来说,接受的答案是可以的。 如果你使用大猩猩/多路复用器,你应该使用这样的东西: func main() { r := mux.NewRouter() r.NotFoundHandler = http.HandlerFunc(notFound) } 并根据需要实现func notFound(w http.ResponseWriter, r *http.Request) 。

多个goroutines在一个频道上收听

我有多个goroutines试图同时在同一个通道上接收。 似乎最后一个开始在渠道上接收的goroutine得到了价值。 这是在语言规范的某个地方还是未定义的行为? c := make(chan string) for i := 0; i < 5; i++ { go func(i int) { <-c c <- fmt.Sprintf("goroutine %d", i) }(i) } c <- "hi" fmt.Println(<-c) 输出: goroutine 4 在操场上的例子 编辑: 我只是意识到这比我想象的更复杂。 消息传遍所有的goroutines。 c := make(chan string) for i := 0; i < 5; i++ { go func(i int) […]

重用Golang中的http连接

我目前正在努力寻找一种在Golang中制作HTTPpost时重用连接的方法。 我创build了一个传输和客户端,如下所示: // Create a new transport and HTTP client tr := &http.Transport{} client := &http.Client{Transport: tr} 然后,我将这个客户端指针传入一个goroutine,这个goroutine正在向同一端点发出多个post,如下所示: r, err := client.Post(url, "application/json", post) 看着netstat这似乎是导致每个职位的新连接导致大量的并发连接正在打开。 在这种情况下重用连接的正确方法是什么?

在Go HTTP处理程序中,为什么ResponseWriter是一个值,但Request是一个指针?

我通过编写GAE的应用程序来学习Go,这是一个处理函数的签名: func handle(w http.ResponseWriter, r *http.Request) {} 我在这里是新手指针,那么为什么Request对象是一个指针,但是ResponseWriter不是? 有没有需要这样做,或者这只是使某种先进的基于指针的代码可能?

获取“bytes.Buffer不执行io.Writer”错误消息

我试图让一些Go对象实现io.Writer,但写入一个string,而不是一个文件或类似文件的对象。 我以为bytes.Buffer将工作,因为它实现了Write(p []byte) 。 但是,当我尝试这个: import "bufio" import "bytes" func main() { var b bytes.Buffer foo := bufio.NewWriter(b) } 我得到以下错误: cannot use b (type bytes.Buffer) as type io.Writer in function argument: bytes.Buffer does not implement io.Writer (Write method has pointer receiver) 我很困惑,因为它清楚地实现了界面。 我该如何解决这个错误?

在http.HandleFunc模式中的通配符

在Go(语言)中注册处理程序时,有什么方法可以在模式中指定通配符? 例如: http.HandleFunc("/groups/*/people", peopleInGroupHandler) *可以是任何有效的URLstring。 或者是唯一的解决scheme来匹配/groups并从处理程序( peopleInGroupHandler )func中找出其余部分?