草庐IT

embedding

全部标签

go - 使用堆栈跟踪创建自定义错误

我正在尝试使用go-errors包括带有我生成的错误的堆栈跟踪。我有一个自定义HttpError类型,我还想包含堆栈跟踪。我最初的想法是通过嵌入来做到这一点,但我似乎无法嵌入它,因为类的名称(Error)与其中一个方法的名称相同。packagenetutilimport("github.com/go-errors/errors")typeHttpErrorstruct{statusint*errors.Error}func(h*HttpError)Error()string{return"Failed"}funcNewHttpError(statusint,messagestring)

pointers - 初始化嵌入式结构时的指针差异

我正在研究结构嵌入,但在保持对嵌入结构的相同引用方面遇到了问题。试用GoPlayground并看到有两个指向*strings.Reader的不同指针地址。packagemainimport("fmt""strings")typeBasestruct{reader*strings.Reader}funcNewBase()*Base{r:=strings.NewReader("hello")fmt.Printf("document:%#+v\n\n",&r)return&Base{r}}func(b*Base)Check(){fmt.Printf("document:%#+v\n\n",&

pointers - 初始化嵌入式结构时的指针差异

我正在研究结构嵌入,但在保持对嵌入结构的相同引用方面遇到了问题。试用GoPlayground并看到有两个指向*strings.Reader的不同指针地址。packagemainimport("fmt""strings")typeBasestruct{reader*strings.Reader}funcNewBase()*Base{r:=strings.NewReader("hello")fmt.Printf("document:%#+v\n\n",&r)return&Base{r}}func(b*Base)Check(){fmt.Printf("document:%#+v\n\n",&

go - 是否导出嵌入错误?

根据Golanguagespec,我可以在结构中嵌入类型。error接口(interface)有一个奇怪的情况。它不是大写的,所以我假设它没有作为类型导出。但它是由语言定义的。所以如果我有这样的结构:packagefootypeErrstruct{error}是否导出了嵌入的错误?Err是否满足error接口(interface)?我可以从另一个包访问它吗,即以下是否可以?packagemainimport"errors"import"fmt"import"foo"funcmain(){e:=foo.Err{}e.error=errors.New("Helloworld!")//ist

go - 是否导出嵌入错误?

根据Golanguagespec,我可以在结构中嵌入类型。error接口(interface)有一个奇怪的情况。它不是大写的,所以我假设它没有作为类型导出。但它是由语言定义的。所以如果我有这样的结构:packagefootypeErrstruct{error}是否导出了嵌入的错误?Err是否满足error接口(interface)?我可以从另一个包访问它吗,即以下是否可以?packagemainimport"errors"import"fmt"import"foo"funcmain(){e:=foo.Err{}e.error=errors.New("Helloworld!")//ist

go - 将 go embedded struct 传递给函数

我有这样的东西:typeFoostruct{}funcNewFoo()*Foo{...}typeBarstruct{*Foo}如何将Bar的实例传递给接受*Foo的函数?funcDoStuff(f*Foo){}funcmain(){bar:=Bar{NewFoo()}DoStuff(bar)//是否可以获取嵌入结构并将其传递给函数?使它起作用的唯一方法是将*Foo视为结构的成员并将其作为bar.foo传递。但这有点困惑,这是唯一的方法吗? 最佳答案 匿名字段可以通过嵌入类型的名称来寻址:typeFoostruct{}typeBars

go - 将 go embedded struct 传递给函数

我有这样的东西:typeFoostruct{}funcNewFoo()*Foo{...}typeBarstruct{*Foo}如何将Bar的实例传递给接受*Foo的函数?funcDoStuff(f*Foo){}funcmain(){bar:=Bar{NewFoo()}DoStuff(bar)//是否可以获取嵌入结构并将其传递给函数?使它起作用的唯一方法是将*Foo视为结构的成员并将其作为bar.foo传递。但这有点困惑,这是唯一的方法吗? 最佳答案 匿名字段可以通过嵌入类型的名称来寻址:typeFoostruct{}typeBars

戈朗 : convert struct to embedded at offset 0 struct

我有一些不同的结构,例如Big和Small嵌入在偏移量0处。我如何从代码访问Small的结构字段,它对Big类型一无所知,但已知Small是在偏移量0处?typeSmallstruct{valint}typeBigstruct{Smallbigvalint}varvinterface{}=Big{}//hereionlyknowabout'Small'structandiknowthatitisatthebeginingofvariablev.(Small).val//compileerror似乎编译器在理论上能够操作这样的表达式,因为它知道Big类型在偏移量0处嵌入了Small类型。

戈朗 : convert struct to embedded at offset 0 struct

我有一些不同的结构,例如Big和Small嵌入在偏移量0处。我如何从代码访问Small的结构字段,它对Big类型一无所知,但已知Small是在偏移量0处?typeSmallstruct{valint}typeBigstruct{Smallbigvalint}varvinterface{}=Big{}//hereionlyknowabout'Small'structandiknowthatitisatthebeginingofvariablev.(Small).val//compileerror似乎编译器在理论上能够操作这样的表达式,因为它知道Big类型在偏移量0处嵌入了Small类型。

interface - 嵌入式结构的覆盖行为

我有一个XY类型,它有各种字段和方法(几十个)。typeXYstruct{NamestringSomeValueint...}func(xy*XY)Do1(){...}func(xy*XY)Do2(){...}func(xy*XY)Do3(){...}...现在我想定义嵌入XY的第二种类型,保留所有字段和方法。但我确实想修改一些功能。typeABstruct{XY}func(ab*AB)Do2(){...}到目前为止一切顺利。现在我想将AB传递给一个接受XY的函数。funcSomeFunc(xy*XY){...}这就是我绊倒的地方,没有多态性。我可以将*AB.XY传递给该函数,但这将不