Tag:

如何处理Go中不同方法的http请求?

我试图找出最好的方式来处理/只有/在/ Go的请求,并以不同的方式处理不同的方法。 这是我所想到的最好的: package main import ( "fmt" "html" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } if r.Method == "GET" { fmt.Fprintf(w, "GET, %q", html.EscapeString(r.URL.Path)) } else if r.Method == "POST" { fmt.Fprintf(w, "POST, %q", html.EscapeString(r.URL.Path)) } else { http.Error(w, "Invalid […]

简单的方法来按字母顺序获得地图中的按键

在Go中,获取按照字母顺序排列的地图中的按键的最简单方法是什么? 这是我能做到的最短的方式: package main import "container/vector" import "fmt" import "sort" func main() { m := map[string]string {"b":"15", "z":"123123", "x":"sdf", "a":"12"} var keys vector.StringVector; for k,_ := range ( m ) { keys.Push(k) } sort.Sort( &keys ) fmt.Printf("%v\n", keys) }

在Golang中复制文件的简单方法

Go有没有简单/快速的方法来复制文件? 我找不到Doc的快捷方式,search互联网也无济于事。

如何在Go中实现可resize的数组

我来自一个C + +的背景,我习惯于使用这个std::vector类。 让我们假设我想要这些dynamic数组: type a struct { b int c string } 这样做的标准方式是什么? 一个片段将是非常有用的

为什么添加并发性降低了这个golang代码?

我已经有了一些Go代码,我一直在琢磨着回答我的一个小小的好奇心,这个代码跟我的姐夫在玩的video游戏有关。 本质上,下面的代码模拟了与游戏中的怪物的交互,以及他多久可以期望他们在失败时丢弃物品。 我遇到的问题是,我期望这样的一段代码对于并行是完美的,但是当我添加并发时,所有模拟的时间往往会减慢4-6倍没有并发。 为了让你更好地理解代码是如何工作的,我有三个主要function:交互function,它是玩家和怪物之间的简单交互。 如果怪物掉落物品则返回1,否则返回0。 模拟function运行多个交互并返回一片交互结果(即1和0表示成功/不成功的交互)。 最后,有一个testing函数,它运行一系列模拟,并返回一个模拟结果片断,这个结果是导致一个丢失项目的交互总次数。 这是我试图并行运行的最后一个function。 现在,我可以理解为什么如果我为每个要运行的testing创build一个goroutine,代码就会变慢。 假设我正在运行100个testing,在我的MacBook Air的4个CPU之间的每个goroutine之间的上下文切换将会导致性能下降,但是我只创build了多个goroutines,因为我拥有处理器,并将testing次数够程。 我希望这可以加快代码的性能,因为我并行地运行了每个testing,但是,当然,我正在慢慢地减速。 我很想弄清楚为什么会这样,所以任何帮助将不胜感激。 下面是没有执行例程的常规代码: package main import ( "fmt" "math/rand" "time" ) const ( NUMBER_OF_SIMULATIONS = 1000 NUMBER_OF_INTERACTIONS = 1000000 DROP_RATE = 0.0003 ) /** * Simulates a single interaction with a monster * * Returns 1 if the monster dropped an item and 0 […]

Go和int64有什么不同?

我有一个string包含一个整数(已从文件中读取)。 我想使用strconv.ParseInt()将string转换为一个int 。 ParseInt要求我提供bitsize(位大小0,8,16,32和64对应于int,int8,int16,int32和int64)。 从文件读取的整数很小(即它应该适合一个正常的int)。 如果我传递一个0的比特,但是,我得到了一个int64types的结果(大概是因为我在64位操作系统上运行)。 为什么发生这种情况? 我怎么才能得到一个正常的int? (如果有人快速入门,何时以及为什么我应该使用不同的inttypes,那太棒了!) 编辑:我可以使用int([i64_var])将int64转换为正常的int。 但我仍然不明白为什么ParseInt()给我一个int64时,我要求的比特大小为0。

将Go图转换成json

我试图将我的Go地图转换为带有encoding/json Marshal的jsonstring,但是却导致了一个空string。 这是我的代码: package main import ( "encoding/json" "fmt" ) type Foo struct { Number int `json:"number"` Title string `json:"title"` } func main() { datas := make(map[int]Foo) for i := 0; i < 10; i++ { datas[i] = Foo{Number: 1, Title: "test"} } jsonString, _ := json.Marshal(datas) fmt.Println(datas) fmt.Println(jsonString) } 我的输出是: map[9:{1 test} 2:{1 test} […]

如何在Golang中发送POST请求?

我发现去http包很混乱。 我认为客户端和服务器应该分成两个不同的包,也许是一个普通的东西。 无论如何试图做出一个POST请求,但我无法完成。 没有收到另一边。 这是应该如何工作? 我知道PostForm函数,但我认为我不能使用它,因为它不能用httputiltesting正确吗? hc := http.Client{} req, err := http.NewRequest("POST", APIURL, nil) form := url.Values{} form.Add("ln", c.ln) form.Add("ip", c.ip) form.Add("ua", c.ua) req.PostForm = form req.Header.Add("Content-Type", "application/x-www-form-urlencoded") glog.Info("form was %v", form) resp, err := hc.Do(req)

频道中的元素数目

使用缓冲通道,如何测量通道中有多less个元素? 例如,我正在创build和发送像这样的频道: send_ch := make(chan []byte, 100) // code send_ch <- msg 我想测量通道send_ch中有多less个信息 。 我知道,由于并发性,测量将不准确,因为在测量和操作之间可能会发生抢占(例如在本video中的“ Google I / O 2012 – 并发模式”中讨论 )。 我将使用这个在生产者和消费者之间的stream量控制,即一旦我通过了一个高水印,改变了一些行为,直到我通过一个低水印回传。

Golang有条件编译

在Go 1中,我有条件编译的麻烦。 这是我的testing代码。 有什么我误解了“+ +构build”约束和“标签”标志? main1.go // +build main1 package main import ( "fmt" ) func main() { fmt.Println("This is main 1") } main2.go // +build main2 package main import ( "fmt" ) func main() { fmt.Println("This is main 2") } 当运行“去build立”,我仍然有编译错误 $ go build -tags 'main1' # test ./main2.go:8: main redeclared in this block […]