Questions tagged «go»

Go是一种开源编程语言。它是静态类型的,具有从C松散派生的语法,添加了自动内存管理,类型安全性,一些动态类型输入功能,其他内置类型,例如可变长度数组(称为slices)和键值映射,以及大型标准库。




3
部分JSON解组到Go中的地图
我的websocket服务器将接收和解组JSON数据。此数据将始终包装在具有键/值对的对象中。密钥字符串将充当值标识符,告诉Go服务器它是哪种值。通过知道什么类型的值,然后我可以进行JSON解组值到正确的结构类型。 每个json对象可能包含多个键/值对。 JSON示例: { "sendMsg":{"user":"ANisus","msg":"Trying to send a message"}, "say":"Hello" } 有什么简单的方法可以使用"encoding/json"软件包来做到这一点? package main import ( "encoding/json" "fmt" ) // the struct for the value of a "sendMsg"-command type sendMsg struct { user string msg string } // The type for the value of a "say"-command type say string func …
98 json  map  go 

4
在Go中使用指针有什么意义?
我知道Go中的指针允许函数参数的突变,但是如果它们仅采用引用(带有适当的const或可变限定符),那不是更简单吗?现在,我们有了指针,并为一些内置类型(如地图和通道)隐式地按引用传递。 我是否缺少某些东西,或者Go中的指针仅仅是不必要的复杂化?
98 pointers  go 

3
获取“ bytes.Buffer无法实现io.Writer”错误消息
我正在尝试使一些Go对象实现io.Writer,但是写入字符串而不是文件或类似文件的对象。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) 我很困惑,因为它清楚地实现了接口。如何解决此错误?
98 go 

5
如何进行日期/时间比较
在Go中进行日期比较是否有任何选择?我必须根据日期和时间-独立地对数据进行排序。因此,我可以允许一个对象在某个日期范围内发生,只要它也在某个时间范围内也发生。在此模型中,我不能简单地选择最旧的日期,最年轻的时间/最新的日期,最新的时间和Unix()秒进行比较。我真的很感谢任何建议。 最终,我编写了一个时间解析字符串比较模块,以检查时间是否在范围内。但是,这并不顺利。我有一些大问题。我将其发布在这里只是为了好玩,但我希望有一种更好的时间比较方法。 package main import ( "strconv" "strings" ) func tryIndex(arr []string, index int, def string) string { if index <= len(arr)-1 { return arr[index] } return def } /* * Takes two strings of format "hh:mm:ss" and compares them. * Takes a function to compare individual sections (split by …

4
在Go中分离单元测试和集成测试
在GoLang中,是否存在将单元测试和集成测试分离的最佳实践?我混合了单元测试(不依赖任何外部资源,因此运行速度非常快)和集成测试(不依赖任何外部资源,因此运行速度较慢)。因此,我希望能够控制说的时候是否包括集成测试go test。 最简单的方法似乎是在main中定义-integrate标志: var runIntegrationTests = flag.Bool("integration", false , "Run the integration tests (in addition to the unit tests)") 然后将if语句添加到每个集成测试的顶部: if !*runIntegrationTests { this.T().Skip("To run this test, use: go test -integration") } 这是我能做的最好的吗?我搜索了证词文档,以查看是否存在命名约定或对我有用的命名约定,但没有找到任何东西。我想念什么吗?

4
如果我不回应,身体会怎样?
在Go中,我有一些http响应,有时我忘了打电话: resp.Body.Close() 在这种情况下会发生什么?会有内存泄漏吗?defer resp.Body.Close()获取响应对象后立即放入是否安全? client := http.DefaultClient resp, err := client.Do(req) defer resp.Body.Close() if err != nil { return nil, err } 如果有错误,可能resp还是resp.Body无效怎么办?
98 go 

2
为什么可以键入别名函数并在不进行强制转换的情况下使用它们?
在Go中,如果您定义新类型,例如: type MyInt int 然后,您不能将a传递给MyInt需要int的函数,反之亦然: func test(i MyInt) { //do something with i } func main() { anInt := 0 test(anInt) //doesn't work, int is not of type MyInt } 精细。但是,为什么同样的不适用于功能呢?例如: type MyFunc func(i int) func (m MyFunc) Run(i int) { m(i) } func run(f MyFunc, i int) { f.Run(i) …
97 types  casting  go 

10
将interface {}转换为int
我正在尝试从JSON获取值并将其转换为int,但它不起作用,而且我不知道如何正确地执行它。 这是错误消息: ...cannot convert val (type interface {}) to type int: need type assertion 和代码: var f interface{} err = json.Unmarshal([]byte(jsonStr), &f) if err != nil { utility.CreateErrorResponse(w, "Error: failed to parse JSON data.") return } m := f.(map[string]interface{}) val, ok := m["area_id"] if !ok { utility.CreateErrorResponse(w, "Error: Area ID …
97 go 

8
如何禁用Golang未使用的导入错误
默认情况下,Go将未使用的导入视为错误,从而迫使您删除导入。我想知道是否有某种希望改变这种行为,例如将其减少为警告。 我发现这个问题非常烦人,使我无法使用Go编码。 例如,我正在测试一些代码,禁用段/功能。库中的某些功能不再使用(例如,fmt,错误等),但是经过一些测试后,我将需要重新启用该功能。现在,除非删除这些导入,否则程序将无法编译,几分钟后,我需要重新导入该库。 在开发GAE程序时,我一次又一次地执行此过程。
96 go 

3
接口{}的范围,它存储一个切片
给定您具有接受功能的场景t interface{}。如果确定t是切片,我如何range在该切片上? func main() { data := []string{"one","two","three"} test(data) moredata := []int{1,2,3} test(data) } func test(t interface{}) { switch reflect.TypeOf(t).Kind() { case reflect.Slice: // how do I iterate here? for _,value := range t { fmt.Println(value) } } } 前往游乐场示例:http://play.golang.org/p/DNldAlNShB

6
无法将[]字符串转换为[]接口{}
我正在编写一些代码,并且我需要它来捕获参数并将它们传递给fmt.Println 我(我想要它的默认行为,编写由空格分隔并后跟换行符的参数)。但是它需要[]interface {}而flag.Args()返回[]string。 这是代码示例: package main import ( "fmt" "flag" ) func main() { flag.Parse() fmt.Println(flag.Args()...) } 这将返回以下错误: ./example.go:10: cannot use args (type []string) as type []interface {} in function argument 这是一个错误吗?不应该fmt.Println接受任何数组吗?顺便说一句,我也尝试过这样做: var args = []interface{}(flag.Args()) 但出现以下错误: cannot convert flag.Args() (type []string) to type []interface {} 有“解决方案”解决此问题吗?

5
如何在Golang中使用Mkdir创建嵌套目录?
我正在尝试从Go可执行文件(例如'dir1 / dir2 / dir3')创建一组嵌套目录。我已经成功创建了以下目录: os.Mkdir("." + string(filepath.Separator) + c.Args().First(),0777); 但是,我不知道如何在该目录内创建预定的嵌套目录集。
95 go  mkdir 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.