英文:
Golang pointer of type within a struct
问题
// 你可以编辑这段代码!
// 点击这里开始输入。
package main
import "fmt"
type Testing struct {
firstname string
}
type Another struct {
*Testing
}
func main() {
var f = Another{Testing: &Testing{firstname: "sasdf"}}
fmt.Println(f)
}
在这段代码中,我使用了一个指针在结构体中。这是我在仓库中见过的一种用法,但我不太理解。
这是做什么用的?起初我以为它会扩展Testing结构体的属性,但事实并非如此。
根据我的观察,Another结构体可能有一个名为Testing的属性,它保存一个值。如果给它赋值var f = Another{Testing: &Testing{firstname: "afsdf"}}
,然后打印输出,会得到一个包含内存地址的结构体。所以这个语法是创建一个新的结构体,其中包含一个指向类型为T的对象的指针,该对象的名称与类型的名称相同。
英文:
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
type Testing struct {
firstname string
}
type Another struct {
*Testing
}
func main() {
var f = Another{firstname: "sasdf"}
fmt.Println(f)
}
Here I've used a pointer in the struct. Its something i've seen used in repository. But i'm not understanding.
What does this do? First i expected it would extend the properties of Testing struct. This ins't true.
From my inspected the Another struct may have a Testing property that holds a value. Giving it var f = Another{Testing: &Testing{firstname: "afsdf"}}
and printing yields a struct containing a memory address. Do this syntax is a new struct with a property that contains a pointer to a object of T named the name of the type
答案1
得分: 2
根据规范中的说明:
> 声明了类型但没有显式字段名的字段被称为嵌入字段。
> 在结构体 x
的嵌入字段中,字段或方法 f
被称为被提升的,如果 x.f
是一个合法的选择器,表示该字段或方法 f
。
> 被提升的字段表现得像结构体的普通字段,但不能在结构体的复合字面量中用作字段名。
最后引用的那句话解释了为什么复合字面量 Another{firstname: "sasdf"}
无法工作。
英文:
>A field declared with a type but no explicit field name is called an embedded field.
>A field or method f
of an embedded field in a struct x
is called promoted if x.f
is a legal selector that denotes that field or method f
.
>Promoted fields act like ordinary fields of a struct except that they cannot be used as field names in composite literals of the struct.
The last quoted sentence is why the composite literal Another{firstname: "sasdf"}
did not work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论