Questions tagged «go»

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

4
将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 {}
181 json  go 

11
从结构中删除字段或将其隐藏在JSON响应中
我已经在Go中创建了一个API,该API在被调用后会执行查询,创建一个结构实例,然后将该结构编码为JSON,然后再发送回调用方。现在,我希望允许调用者通过传递“字段” GET参数来选择他们想要返回的特定字段。 这意味着根据字段值,我的结构将发生变化。有什么方法可以从结构中删除字段?或者至少将它们动态隐藏在JSON响应中?(注意:有时我有空值,因此JSON omitEmpty标记在这里不起作用)如果这两种方法都不可行,是否有更好的处理方法的建议?提前致谢。 我正在使用的结构的较小版本如下: 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 …
180 json  go 

5
如何使用自定义包
我正在尝试在Go中创建和使用自定义包。这可能很明显,但是我找不到很多信息。基本上,我在同一个文件夹中拥有这两个文件: mylib.go package mylib type SomeType struct { } main.go package main import ( "mylib" ) func main() { } 当我尝试时go run main.go,出现此错误: main.go:4:2: import "mylib": cannot find package 我尝试先运行,go build mylib.go但似乎没有做任何事(未生成文件,没有错误消息)。所以有什么想法我该怎么做?
178 import  package  go 

2
将字节片转换为io.Reader
在我的项目中,我从请求的响应中得到了一个字节片。 defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Println("StatusCode为" + strconv.Itoa(resp.StatusCode)) return } respByte, err := ioutil.ReadAll(resp.Body) if err != nil { log.Println("fail to read response data") return } 这可行,但是如果我要获取响应的正文io.Reader,该如何转换?我尝试了newreader / writer,但没有成功。
177 go 

4
无法将数据(类型接口{})转换为字符串类型:需要类型断言
我还很新,我正在玩这个通知包。 最初,我有如下代码: func doit(w http.ResponseWriter, r *http.Request) { notify.Post("my_event", "Hello World!") fmt.Fprint(w, "+OK") } 我想将换行符添加到上面Hello World!的函数中doit,但不要添加,因为那将是微不足道的,但是在handler此后,如下所示: func handler(w http.ResponseWriter, r *http.Request) { myEventChan := make(chan interface{}) notify.Start("my_event", myEventChan) data := <-myEventChan fmt.Fprint(w, data + "\n") } 之后go run: $ go run lp.go # command-line-arguments ./lp.go:15: invalid operation: data + "\n" …
175 go  type-mismatch 

2
Go中带有JSON Marshal的小写JSON密钥名称
我希望使用该"encoding/json"软件包封送在我的应用程序的一个导入软件包中声明的结构。 例如。: type T struct { Foo int } 因为是导入的,所以结构中所有可用的(导出的)字段都以大写字母开头。但我希望使用小写的键名: out, err := json.Marshal(&T{Foo: 42}) 将导致 {“ Foo”:42} 但我希望得到 {“ foo”:42} 是否可以通过一些简单的方法解决问题?
175 json  go  marshalling 


10
有没有办法遍历整数范围?
Go的范围可以遍历地图和切片,但是我想知道是否有一种方法可以遍历一系列数字,例如: for i := range [1..10] { fmt.Println(i) } 还是有一种方法可以像GoRuby那样使用Range来表示Go中的整数范围?
174 go 


7
如何不使用gopath导入本地软件包
我已经习惯了,GOPATH但是对于当前问题,我却无济于事。我希望能够创建特定于项目的软件包: myproject/ ├── binary1.go ├── binary2.go ├── package1.go └── package2.go 我尝试了多种方法,但是如何package1.go在binary1.go或上工作binary2.go,以此类推? 例如; 我希望能够import "package1"然后能够运行,go build binary1.go并且一切正常,而不会引发在GOROOT或上找不到软件包的错误GOPATH。我需要这种功能的原因是针对大型项目;我不想引用多个其他软件包或将它们保存在一个大文件中。
171 go  package 

2
如何获得切片的最后一个元素?
提取切片的最后一个元素的Go方法是什么? var slice []int slice = append(slice, 2) slice = append(slice, 7) slice[len(slice)-1:][0] // Retrieves the last element 上面的解决方案有效,但看起来很尴尬。
166 go  slice 

5
删除地图[关键字]吗?
我有一张地图: var sessions = map[string] chan int{} 如何删除sessions[key]?我试过了: sessions[key] = nil,false; 那没用。 更新(2011年11月): Go版本1中删除了删除映射条目的特殊语法: Go 1将删除特殊的地图分配,并引入一个新的内置函数delete:delete(m, x)将删除由表达式检索的地图条目m[x]。...
166 map  go 

8
设置HTTP头
我正在尝试在Go Web服务器中设置标题。我正在使用gorilla/mux和net/http软件包。 我想设置Access-Control-Allow-Origin: *为允许跨域AJAX。 这是我的Go代码: func saveHandler(w http.ResponseWriter, r *http.Request) { // do some stuff with the request data } func main() { r := mux.NewRouter() r.HandleFunc("/save", saveHandler) http.Handle("/", r) http.ListenAndServe(":"+port, nil) } 该net/http程序包中有描述将HTTP请求标头作为客户端发送的文档-我不确定如何设置响应标头?
165 http  go  cors  http-headers 

5
Go中结构的堆栈与堆分配,以及它们与垃圾回收的关系
我是Go的新手,在C风格的基于堆栈的编程(其中自动变量位于堆栈上,分配的内存位于堆中)与Python风格的基于堆栈的编程(在其中唯一存在于堆栈中的东西是对堆上对象的引用/指针。 据我所知,以下两个函数给出的输出相同: func myFunction() (*MyStructType, error) { var chunk *MyStructType = new(HeaderChunk) ... return chunk, nil } func myFunction() (*MyStructType, error) { var chunk MyStructType ... return &chunk, nil } 即分配一个新的结构并返回它。 如果用C编写,第一个将对象放到堆上,第二个将对象放到堆栈上。第一个将返回指向堆的指针,第二个将返回指向堆栈的指针,该指针将在函数返回时消失,这将是一件坏事。 如果我用Python(或C#以外的许多其他现代语言)编写它,则示例2不可能实现。 我知道Go垃圾收集了两个值,因此上述两种形式都可以。 报价: 注意,与C语言不同,完全可以返回局部变量的地址。函数返回后,与变量关联的存储将保留。实际上,采用复合文字的地址会在每次对其求值时分配一个新实例,因此我们可以将后两行结合在一起。 http://golang.org/doc/effective_go.html#functions 但这引起了两个问题。 1-在示例1中,该结构在堆上声明。例子2呢?是在栈中声明的方式是否与在C中声明的方式相同,还是在堆上进行声明? 2-如果在堆栈上声明了示例2,则函数返回后如何保持可用状态? 3-如果实际上在堆上声明了示例2,那么如何通过值而不是通过引用传递结构?在这种情况下指针的意义是什么?

6
Go中的零检测
我在Go中看到很多检测nil的代码,如下所示: if err != nil { // handle the error } 但是,我有一个这样的结构: type Config struct { host string port float64 } 而config是Config的实例,当我这样做时: if config == nil { } 有编译错误,说:无法将nil转换为Config类型
165 go  null 

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.