登录
首页 >  Golang >  Go问答

Go结构体初始化

来源:stackoverflow

时间:2024-04-14 09:30:33 342浏览 收藏

本篇文章给大家分享《Go结构体初始化》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

为什么 go 可以同时使用 &personperson 来初始化?

package main

import "fmt"

type Person struct {
    name string
}

func (p Person) Who() string {
    return "Person: " + p.name
}

func main() {
    var p1 = &Person{"Adam"}
    fmt.Println(p1.Who()) // Adam
    var p2 = Person{"Ben"}
    fmt.Println(p2.Who()) // Ben
}

正确答案


p2 := Person{"Ben"} 通过将 "Ben" 分配给 name 来初始化 Person 结构体,并将其分配给 p2p2 是值类型 Person

p1 := &Person{"Adam"} 通过将 "Adam" 分配给 name 来初始化 Person 结构体,然后将该结构体的地址分配给 p1p1 是指针类型 *Person

Who() 是为值类型 Person 的接收者定义的方法,这意味着该功能始终接收接收实例的副本。当涉及到可变性时,这是一个重要因素。这也适用于指针句柄,例如在您的示例中使用 p2,但接收器将继续是实例的本地副本,除非您将接收器定义更改为 (p *Person),这将提供本地副本指针引用。

到这里,我们也就讲完了《Go结构体初始化》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>