草庐IT

func_pointer

全部标签

pointers - 指针字符串 slice (*[]string)的Cgo指针传递规则?

我能否将*[]string从Go传递给C,然后append到字符串slice,或者它是否违反了pointerpassingspec?GocodemaypassaGopointertoC,providedtheGomemorytowhichitpointsdoesnotcontainanyGopointers.示例代码:packagemain/*externvoidgo_callback(void*,char*);staticinlinevoidcallback(void*stringSliceGoPointer){go_callback(stringSliceGoPointer,"fo

go - channel 在 func main() 上发送和接收

我一直在学习channel,课本上的例子看起来简单易懂。但是,我无法理解以下行为。funcmain(){message:=make(chanstring)message为什么上面会导致错误?我知道我可以通过引入一个go例程让发送者和接收者都准备好来让它工作。但是,如果是这样的话,为什么下面的工作会起作用。funcmain(){message:=make(chanstring,1)message*********感谢JoeMcMahon的回答******************下面的文档供我引用*********我假设缓冲区1(与2不同)也会阻塞主例程,直到它找到相应的接收器。似乎1的缓

go - channel 在 func main() 上发送和接收

我一直在学习channel,课本上的例子看起来简单易懂。但是,我无法理解以下行为。funcmain(){message:=make(chanstring)message为什么上面会导致错误?我知道我可以通过引入一个go例程让发送者和接收者都准备好来让它工作。但是,如果是这样的话,为什么下面的工作会起作用。funcmain(){message:=make(chanstring,1)message*********感谢JoeMcMahon的回答******************下面的文档供我引用*********我假设缓冲区1(与2不同)也会阻塞主例程,直到它找到相应的接收器。似乎1的缓

pointers - `go print(v)` 和 `go func() { print(v) }()` 之间的区别?

代码如下:typefieldstruct{namestring}funcprint(p*field){fmt.Println(p.name)}funcfix1(){data:=[]*field{{name:"one"},{name:"two"},{name:"three"}}for_,v:=rangedata{goprint(v)}time.Sleep(time.Millisecond*200)}funcwrong1(){data:=[]*field{{name:"one"},{name:"two"},{name:"three"}}for_,v:=rangedata{gofunc(){

pointers - `go print(v)` 和 `go func() { print(v) }()` 之间的区别?

代码如下:typefieldstruct{namestring}funcprint(p*field){fmt.Println(p.name)}funcfix1(){data:=[]*field{{name:"one"},{name:"two"},{name:"three"}}for_,v:=rangedata{goprint(v)}time.Sleep(time.Millisecond*200)}funcwrong1(){data:=[]*field{{name:"one"},{name:"two"},{name:"three"}}for_,v:=rangedata{gofunc(){

go - 如何避免 "invalid memory address or null pointer dereference"错误?

我想知道如何构造此示例代码以帮助避免空指针取消引用panic:packagemainimport"fmt"typeAstructstruct{NumberintLetterstring}typeBstructstruct{foointAStructList*[]Astruct}typeCstructstruct{Bstruct}func(a*Astruct)String()string{returnfmt.Sprintf("Number=%d,Letter=%s",a.Number,a.Letter)}funcmain(){astructlist:=make([]Astruct,3)/

go - 如何避免 "invalid memory address or null pointer dereference"错误?

我想知道如何构造此示例代码以帮助避免空指针取消引用panic:packagemainimport"fmt"typeAstructstruct{NumberintLetterstring}typeBstructstruct{foointAStructList*[]Astruct}typeCstructstruct{Bstruct}func(a*Astruct)String()string{returnfmt.Sprintf("Number=%d,Letter=%s",a.Number,a.Letter)}funcmain(){astructlist:=make([]Astruct,3)/

pointers - 为什么我不能使用指向需要 *interface{} 的特定类型的指针?

我有以下功能:funcbytesToData(datainterface{},b[]byte)error{buf:=bytes.NewBuffer(b)dec:=gob.NewDecoder(buf)returndec.Decode(data)}我用它来获取进出boltdb的结构数据。我想做的是将该签名更改为:funcbytesToData(data*interface{},b[]byte)error然后我希望能够像这样调用它(b在这种情况下是一个gob编码的Account)acc:=&Account{}err:=bytesToData(acc,b)但是当我这样做时,我收到了类似Can

pointers - 为什么我不能使用指向需要 *interface{} 的特定类型的指针?

我有以下功能:funcbytesToData(datainterface{},b[]byte)error{buf:=bytes.NewBuffer(b)dec:=gob.NewDecoder(buf)returndec.Decode(data)}我用它来获取进出boltdb的结构数据。我想做的是将该签名更改为:funcbytesToData(data*interface{},b[]byte)error然后我希望能够像这样调用它(b在这种情况下是一个gob编码的Account)acc:=&Account{}err:=bytesToData(acc,b)但是当我这样做时,我收到了类似Can

pointers - 为什么不能将指针附加到数组?

packagemainimport"fmt"typeCirclestruct{xstring}funcmain(){circle:=Circle{x:"blah"}results:=make([]*Circle,1)results=append(results,&circle)fmt.Printf("Here:%s\n",results[0].x)}如果我将行results=append(results,&circle)更改为results[0]=&circle就可以正常工作。找不到任何原因说明为什么会这样。 最佳答案 可以,只是你