jjzjj

pointers - 指向结构的指针更改未反射(reflect)在调用者中

我将一个指向结构的指针传递给另一个名为someFunc()的函数并在那里进行更改,但在本例中,它不会反映在调用方函数中。typeSlotstruct{f1intf2stringf3[]*string}funcNewSlot(f1,f2){return&Slot{f1:f1,f2:f2,f2:make([]*string,0)}}funcmain(){slots:=&Slots{}scanner:=bufio.NewScanner(os.Stdin)forscanner.Scan(){s:=scanner.Text()sarr:=strings.Split(s,"")fmt.Printl

pointers - 创建变量会创建一个副本,取消引用不会。为什么?

为什么将值放入变量会创建一个副本,但取消引用却不会?是编译器的简单优化,知道它可以只使用原始结构的地址,而创建变量总是分配新内存吗?示例1:x1:=&struct{xint}{x:0}y1:=*x1z1:=&y1z1.x++fmt.Printf("---1:\n%#v\n%#v\n",x1,z1)示例2:x2:=&struct{xint}{x:0}z2:=&*x2z2.x++fmt.Printf("---2:\n%#v\n%#v\n",x2,z2)在这里运行:https://play.golang.org/p/myugNmjrQFjgo文档中是否有描述此行为的部分?

pointers - 调用结构函数给出 "cannot refer to unexported field or method"

我有这样的结构:typeMyStructstruct{Idstring}和函数:func(m*MyStruct)id(){//doingsomethingwithidhere}我还有一个这样的结构:typeMyStruct2struct{m*MyStruct}现在我有一个函数:funcfoo(str*MyStruct2){str.m.id()}但是我在编译时遇到错误:str.m.idundefined(cannotrefertounexportedfieldormethodmypackage.(*MyStruct)."".id如何正确调用这个函数? 最佳答案

pointers - X不实现Y(…方法具有指针接收器)

关于“x不实现y(…方法有一个指针接收器)“事情,但对我来说,他们似乎在谈论不同的事情,而不适用于我的具体情况。所以,我不是把这个问题说得很具体,而是把它说得宽泛而抽象--似乎有几种不同的情况会导致这个错误发生,有人能总结一下吗?也就是说,如何避免这个问题,如果它发生了,有什么可能性?谢谢。 最佳答案 当您试图将具体类型分配或传递(或转换)给接口类型时,会出现此编译时错误;而该类型本身并没有实现接口,只是指向该类型的指针。让我们看一个例子:typeStringerinterface{String()string}typeMyType

pointers - 如何设计具有可修改字段的结构?

我正在用Go编写一个简单的游戏,但遇到了一些问题。我的代码如下所示:packagemainimport"fmt"typeLocationstruct{XintYint}typeCarstruct{MaxSpeedintLocLocation}func(carCar)SetLocation(locLocation){car.Loc=loc}func(carCar)GetLocation()Location{returncar.Loc}typeBikestruct{GearsNumintLocLocation}func(bikeBike)SetLocation(locLocation){b

pointers - 在 golang 中打印一组空接口(interface)?

我有一个结构,其字段形式为field[]interface{}。如果我打印该字段,我会得到一个指针引用。如果我尝试取消引用该字段,我会收到“无效间接”错误。代码如下:typeMyTypestruct{field[]interface{}}myType:=//createaMyType.Fieldisjustanarrayofnumbersprintln(myType.field)//printsapointerreference,ex:[1/1]0xc420269aa0println(*(myType.field))//doesn'tcompile如何打印myType.field中的值

pointers - 为什么 fmt.Println 在打印指针时不一致?

我是一名经验丰富的程序员,但之前从未接触过Go。我刚开始玩弄它,我发现fmt.Println()实际上会打印以&为前缀的指针的值,这很简洁。但是,它并不是对所有类型都这样做。我很确定这是因为它不能使用的类型是原始类型(或者至少,Java会这样调用它们,Go是这样吗?)。有谁知道为什么Gofmt库中存在这种不一致的行为?我可以使用*p轻松检索值,但由于某些原因Println没有这样做。例子:packagemainimport"fmt"typeXstruct{Sstring}funcmain(){x:=X{"HelloWorld"}fmt.Println(&x)//&{HelloWorld

pointers - 调用结构属性方法时 Golang 结构指针引用丢失

我正在尝试使用struct来管理树上的访问节点。每当我访问父节点的子节点的方法时,后续调用的父引用就会丢失(即parent.child.method(child)->[parentbecomesnil]->parent(thepreviouschild).child...等等).这是我文件中的错误片段。typeNodestruct{Left*NodeRight*Nodevalueint}func(parent*Node)determineSide(child*Node)(Node,Node){ifchild.Valueparent.Value{ifparent.hasRightNode

pointers - 可选择将 .Where() 应用于 gorm.DB

我是Go的新手,我的指针知识已经生锈了。我想改变gorm.DB的一个实例,以便我可以对其应用0个或多个Where子句。func(){db:=gorm.Open(/*...*/)err:=applyWhere(db,filters).Order("created_datetimedesc").Find(&rMessages).Error//...}funcapplyWhere(db*gorm.DB,filtersFilters)*gorm.DB{iffilters.MessageType!=""{db=db.Where(&message{MessageType:string(filter

戈朗 : How do you use a pointer on a struct that hasn't been initialized yet

所以我在看filehere.他们调用record:=&accessLog但他们从来没有首先将其初始化为变量,如果他们这样做,如果有多个同时连接,记录是否有可能被覆盖用别人的数据?typeaccessLogstruct{ip,method,uri,protocol,hoststringelapsedTimetime.Duration}funcLogAccess(whttp.ResponseWriter,req*http.Request,durationtime.Duration){clientIP:=req.RemoteAddrifcolon:=strings.LastIndex(cli