草庐IT

alias-method

全部标签

methods - 重命名类型后,我无法访问其某些方法

为了防止我的项目的不同文件有多个依赖关系,并且由于我可能会更改数据的呈现方式,我决定为draw2dpackage创建一个“接口(interface)”(不是golang意义上的,而是架构方式)因为我不需要其他任何东西,所以我只是重命名了其中一种类型:typeCanvasContextdraw2dimg.GraphicContext在我的一个模块中,我有以下代码(路径是CanvasContext变量)://initializationandsomecodeomittedforclaritypath.SetFillColor(color.RGBA{0x44,0xff,0x44,0xff})

go-golang编译错误: type has no method

如何解决?https://play.golang.org/p/aOrqmDM91J:28:Cache.Segmentundefined(typeCachehasnomethodSegment):29:Cache.Segmentundefined(typeCachehasnomethodSegment)packagemainimport"fmt"typeSlotstruct{Key[]stringVal[]string}typeCachestruct{Segment[3615]Slot}funcNewCache(sint)*Cache{num:=3615Cacheobj:=new(Cac

methods - 方法接收者

Go方法接收器接受一个类型以及该类型的变量名,例如:typeMyFloatfloat64func(xMyFloat)Abs()float64{ifx接收方采用"x"以及接收方法的类型。名称“x”的意义是什么。因为我能够在MyFloat的任何实例上调用该方法(而不仅仅是在名为x的实例上),为什么我必须指定x?由于接收者是类型或对类型的引用,为什么不像这样简单地单独使用类型或指针func(MyFloat)Abs()float64{ifthis我的假设是在Javagolang中代替this允许任何名称?是这样吗? 最佳答案 您的假设是准确

methods - 为什么 Go 中的方法只能声明在同一个包中定义的类型上?

GoTour说如下:Youcanonlydeclareamethodwithareceiverwhosetypeisdefinedinthesamepackageasthemethod.Youcannotdeclareamethodwithareceiverwhosetypeisdefinedinanotherpackage(whichincludesthebuilt-intypessuchasint).除了避免每个人都根据int和string构建自己的方法之外,还有其他原因吗?我用Google搜索了一下,但找不到任何引用它的内容。 最佳答案

go - 设计Go包: when I should define methods on types?

假设我有一个typeTint类型,并且我想定义一个对此类型进行操作的逻辑。我应该使用什么抽象?何时使用?在该类型上定义方法:func(Tt)someLogic(){//...}定义函数:funcsomelogic(Tt){//...} 最佳答案 在某些情况下,您倾向于使用方法:改变接收者:修改对象字段的事物通常是方法。对于您的用户,x.Foo会修改X而不是Foo(x)会令您感到惊讶。接收者的副作用:如果对象以微妙的方式对对象/通过对象具有副作用,则它们通常是某种类型的方法,例如写入struct的一部分的网络连接,或通过指针或slic

methods - Go嵌入结构调用子方法而不是父方法

这里是带有一个接口(interface)、一个父结构和2个子结构的Go代码示例packagemainimport("fmt""math")//ShapeInterface:definesmethodstypeShapeInterfaceinterface{Area()float64GetName()stringPrintArea()}//ShapeStruct:standardshapewithanareaequalto0.0typeShapestruct{namestring}func(s*Shape)Area()float64{return0.0}func(s*Shape)GetN

types - Go 中 "alias"类型的开销

我正在编写vector.go作为我程序的一部分。它提供了一个三维vector结构和一些向量操作。为了与一般的vector类型对称,我想提供一个scalar类型:typescalarfloat64我喜欢这个,因为我没有理由每次都指定我的标量的精度。它们是64位的这一事实是我宁愿只指定一次的细节。唯一的问题是我知道这与C中的typedef不同。幕后似乎还有更多事情要做。我的问题:这会产生任何开销吗?如果是这样,何时以及多少?当性能绝对关键时,我可以使用它吗?(假设我将每次出现的float64替换为scalar并转换文字,例如scalar(1.0)。) 最佳答案

methods - golang区分T和*T上的方法集的原因是什么?

这是我学习围棋时最困惑的地方。我们都知道T上的方法只影响T的副本,*T上的方法会影响T上的实际数据。为什么T上的方法也可以被*T使用,反之则不行?那么,你能给我一个例子(或理由)说明为什么他们不允许T使用*T上的方法吗?这种设计的优缺点是什么? 最佳答案 这里有很多答案,但没有一个能回答为什么会这样。首先让我们假设您有一个*T并想调用一个接受T的方法。要做到这一点,您需要做的就是将*yourT(其中*用于取消引用指针)传递给功能。这保证是可能的,因为您只是在已知位置复制内存块。现在假设您有一个T并且想要一个*T。您可能认为您可以只执

methods - Go 中的方法图

在某些情况下(如添加、删除等),我调用了几种方法。然而,随着时间的推移,案例数量在增加,我的switch-case也越来越长。所以我想我会创建一个方法图,比如Gomapoffunctions;这里函数的映射是微不足道的。但是,是否可以在Go中创建方法的映射?当我们有一个方法时:func(f*Foo)Add(astring,bint){}下面的语法会产生编译时错误:actions:=map[string]func(a,b){"add":f.Add(a,b),}是否可以在Go中创建方法映射? 最佳答案 是的。目前:actions:=ma

git - zsh : alias gco ='git checkout' 中别名子命令的 Tab 补全

我有一个别名:aliasgco='gitcheckout'如何像输入gitcheckout一样添加制表符补全?对于我的aliasg='git',我使用compdefg='git'。我一直在尝试使用compdef但我没有取得任何成功。 最佳答案 禁用此选项,你也很好......#don'texpandaliases_before_completionhasfinished#like:gitcomm-[tab]#setoptcomplete_aliases 关于git-zsh:aliasgc