草庐IT

GoLang - 将 nil 传递给接受接口(interface)的函数

我最近偶然发现了一些让我在golang中陷入循环的东西。packagemainimport("net/http""bytes""fmt""io/ioutil")funccreateRequest(method,uristring,data*bytes.Buffer)string{req,err:=http.NewRequest(method,uri,data)iferr!=nil{return""}req.Close=trueclient:=&http.Client{}resp,err:=client.Do(req)iferr!=nil{return""}deferresp.Body.

postgresql - Go 和 postgres 将整数重新解释为 nil 类型

我正在尝试让一些旧代码通过单元测试。给我带来问题的测试在这里:funcTest1(t*testing.T){//CodetestDevice:=Device{ID:1,Guid:"C6",Name:"testdevice",}err:=Dbmap.Insert(&testDevice)So(err,ShouldBeNil)//Morecode}当我运行gotest,这将返回:'sql:Scanerroroncolumnindex0:convertingdriver.Valuetype("")toaint64:invalidsyntax'这很奇怪,因为我传递给它1,一个整数。设备结构在这

pointers - 简洁的 nil 检查结构字段指针?

假设我有这个结构:typeFoostruct{Bar*string`json:"bar"`Baz*int64`json:"baz,omitempty"`Qux*string`json:"qux"`Quuxstring`json:"quux"`}解码json后,我像这样检查nil:switch{casef.Bar==nil:returnerrors.New("Missing'bar'")casef.Baz==nil:f.Baz=42casef.Qux==nil:returnerrors.New("Missing'qux'")}(或通过一系列if语句等...)我知道我可以将所有nil比较放

google-app-engine - 解决无效的内存地址或 nil 指针取消引用

在这个问题上敲我的头。我无法获得分配给结构的HTTP响应。我的结构是这样设置的:typeDataConnectstruct{Response*Response}typeResponsestruct{response[]byteerrors[]string}然后有问题的函数布局如下(为了便于阅读而修剪):137func(d*DataConnect)send()bool{...154out,err:=ioutil.ReadAll(resp.Body)155iferr!=nil{156fmt.Println(err)157}158159fmt.Printf("%s\n",out)//THIS

go - 测试返回值是否存在,可以是具体的也可以是 nil

您将如何为一个返回值可以是nil或具体值的函数编写测试?我不关心实际值本身,我只关心这个值有没有被返回。typeCustomTypestruct{}funcTestSomeFunc(t*testing.T){case:=map[string]struct{InputstringExpected*CustomType//expectedresultErrorerror//expectederrorvalue}{"testcase1":"input",&CustomType{},//couldbeniloraconcretevaluenil,"testcase2":"input",nil,

mysql - 使用 sql.DB 的无效内存地址或 nil 指针取消引用

我目前正在学习Go并尝试制作一个小的SQL工具集:typeDBUtilsstruct{UserstringPasswordstringHoststringDatabasestringHandle*sql.DB}func(dbUtilDBUtils)Connect(){varerrerrordbUtil.Handle,err=sql.Open("mysql",dbUtil.User+":"+dbUtil.Password+"@tcp("+dbUtil.Host+")/"+dbUtil.Database)iferr!=nil{panic(err.Error())}err=dbUtil.Ha

go - 将 nil []byte 变量转换为字符串不会 panic。为什么不?

packagemainimport("fmt")funcmain(){varbts[]byte=nilfmt.Println("theresult:",string(bts))//whynotpanic?//theresult:}https://play.golang.org/p/dzRzzKvUyd 最佳答案 一般来说,对于可以为nil的任何类型,您都可以生成您喜欢的任何字符串表示形式!这是因为在实现fmt.Stringer接口(interface)(参见here)时-或者任何类型的函数都可以是nil-你可以有一个nil为接收器值

go - Spdy 流接收器正在接收 nil 对象

我正在使用libchandocker的图书馆。他们的例子是这样的://client.gopackagemainimport("log""io""net""os""github.com/docker/libchan""github.com/docker/libchan/spdy")typeRemoteCommandstruct{CmdstringArgs[]stringStdinio.WriterStdoutio.ReaderStderrio.ReaderStatusChanlibchan.Sender}typeCommandResponsestruct{Statusint}funcma

go - (nil) 在这种情况下到底在做什么 []string(nil)

我在看slice技巧:https://github.com/golang/go/wiki/SliceTricks我注意到在他们的复制示例中他们有[]T(nil)我以前从未见过像这样的(nil)并且我找不到任何关于使用它或它究竟完成了什么的文档(我知道它是不言自明的,但我想知道它是如何实现的与make或[]string{}相同我可以通过谷歌搜索“golang(nil)slice”找到的唯一引用是Sincethezerovalueofaslice(nil)actslikeazero-lengthslice,youcandeclareaslicevariableandthenappendto

go - `(*RawMessage)(nil)` 是什么意思?

本节InterfacechecksfromEffectiveGo推荐var_json.Marshaler=(*RawMessage)(nil)作为编译时检查RawMessage是否实现了Marshaler。我知道赋值是如何进行类型检查的,但右侧到底是什么意思? 最佳答案 好的,我想通了。它通过将nil转换为*创建一个新的*RawMessage(指向RawMessage的指针),它是nil原始消息。我早该想到*RawMessage(nil)但是那行不通,因为cast转换似乎优先于指针运算符,所以它会成为取消引用。