草庐IT

pointer_traits

全部标签

pointers - 什么时候返回指向结构的指针是个好主意?

我正在学习Go,但对于何时使用指针有点困惑。具体来说,从函数返回struct时,什么时候返回struct实例本身合适,什么时候返回指向该结构的指针合适?示例代码:typeCarstruct{makestringmodelstring}funcWhatever(){varcarCarcar:=Car{"honda","civic"}//...returncar}在哪些情况下我想要返回指针,而我不想想要返回指针?有没有好的经验法则? 最佳答案 您需要牢记两点,性能和API。如何使用汽车?它是一个有状态的对象吗?它是一个大结构吗?不幸的是

pointers - 指向指针的指针有什么用?

在Go编程语言中;指向指针的指针如何变得有用?(如果它们不是真的有用,为什么它们不是非法的?) 最佳答案 任何数据类型的有用性取决于正在解决的问题以及用于解决问题的方法。如果一个数据类型不适合问题,它根本不适合问题-没有别的了。Go编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的简单规则。其中一些规则是:*T:创建一个新的数据类型,它是一个指向T的指针[10]T:Ts数组struct{tT;uU...}:一个包含T作为组件的结构...程序员可以通过组合这些简单的规则来创建复杂的数据类型。可能的数据类型的总数超过了

pointers - 在go中找到常量的地址

我们编写了一个程序,通过它我们试图找到一个常量的地址。可以这样吗?packagemainfuncmain(){constk=5address:=&k}它给出了一个错误,谁能告诉我们如何找到一个常量的地址? 最佳答案 简而言之:你不能。错误信息说:cannottaketheaddressofk地址运算符&的操作数有限制。Spec:Addressoperators:ForanoperandxoftypeT,theaddressoperation&xgeneratesapointeroftype*Ttox.Theoperandmustbe

pointers - 在 Golang 错误中从一个指针类型转换为另一种指针类型

谁能告诉我为什么这不能编译?packagemaintypemyintintfuncset(a**myint){i:=myint(5)*a=&i}funcmain(){vark*intset((**myint)(&k))//cannotconvert&k(type**int)totype**myintprint(*k)}到目前为止,我的推理是这样的。Golang中的所有类型都是不同的,但只要底层类型相同,它就允许使用类似C的强制转换语法从一种类型转换为另一种类型。在我的示例中,将“int”转换为“myint”不是问题。'*int'到'*myint'也不是。当你有指针问题时就会出现指针问题

pointers - 默认情况下,指针是否在方法内部取消引用?

我对Go结构中的方法感到困惑。我在他们的教程中跟随:func(p*Page)save()error{filename:=p.Title+".txt"returnioutil.WriteFile(filename,p.Body,0600)}据我了解,p是指针,您需要在检索属性之前取消引用指针,例如:filename:=(*p).Title+".txt"这对我来说有意义的唯一方法是,如果点的行为类似于C++中的->。我错过了什么? 最佳答案 是的,指向结构的指针会自动取消引用。来自speconselectors:Thefollowing

pointers - 将 nil 接口(interface)转换为 Golang 中的指针?

在下面的代码片段中,尝试将nil接口(interface)转换为指针失败并出现以下错误:interfaceconversion:interfaceisnil,not*main.NodetypeNexterinterface{Next()Nexter}typeNodestruct{nextNexter}func(n*Node)Next()Nexter{...}funcmain(){varpNextervarn*Nodefmt.Println(n==nil)//willprinttruen=p.(*Node)//willfail}在此处播放链接:https://play.golang.or

pointers - Golang 反射 : Can't set fields of interface wrapping a struct

我正在尝试实现一种方法,该方法可以更改可以具有任意结构的对象中的字段值。当我有指向结构的指针时,字段的遍历没有问题。但是,当我有一个不包含指向结构的指针而是结构本身的接口(interface)时,我无法更改字段,简而言之://Thefollowingdoesn'tworkvarxinterface{}=A{Str:"Hello"}//Thispanics:reflect:callofreflect.Value.FieldonptrValuereflect.ValueOf(&x).Field(0).SetString("Bye")//Thispanics:reflect:callofre

pointers - struct中的指针和值有什么区别?

给定以下结构:typeExpstruct{fooint,bar*int}在结构中使用指针或值时,性能有何不同。是否有任何开销或者这只是Go编程的两个学校?我会使用指针来实现链式结构,但这是我们必须在结构中使用指针以获得性能的唯一情况吗?PS:在上面的结构中,我们讨论了一个简单的int,但它可以是任何其他类型(甚至是自定义类型) 最佳答案 使用对您的程序最实用的表单。基本上,这意味着如果值是nil有用,则使用指针。从性能的角度来看,原始数字类型的复制总是比取消引用指针更有效。如果更复杂的数据结构小于一两个缓存行(对于x86CPU来说,

go - Go 编程语言中的 "method requires pointer receiver"

我刚刚看到了Go编程语言的介绍,并想尝试写几行。在我尝试在这种情况下使用界面之前,一切正常。我该如何解决?packagemainimport"fmt"typeentityfloat32func(e*entity)inc(){*e++}typeincerinterface{inc()}funcdoSomething(iincer){i.inc()}funcmain(){fmt.Println("Hello,世界")vareentity=3e.inc()doSomething(e)fmt.Println(e)}我得到编译器错误:prog.go:24:cannotusee(typeentit

pointers - 指针解引用在 Go 中是如何工作的?

我正在查看http://tour.golang.org/上的golang教程,并在example29中尝试了一些东西这里复制原始示例供您引用:packagemainimport"fmt"typeVertexstruct{X,Yint}var(p=Vertex{1,2}//hastypeVertexq=&Vertex{1,2}//hastype*Vertexr=Vertex{X:1}//Y:0isimplicits=Vertex{}//X:0andY:0)funcmain(){fmt.Println(p,q,r,s)}它非常基础,展示了如何创建这个花哨的新结构Vertex的实例。Exam