Go 学习笔记-创建结构体的几种方式

234 阅读1分钟

方式一

  • 普通方式创建结构体变量
  • 结构体对象空间都是独立的,互不干扰
package main

type Person struct {
    Name string
    Age int
}

func main() {
    var p1 Person
    p1.Name = "张三"
    var p2 Person
    p2 = p1
    p2.Name = "李四"
    fmt.Println(p1, p2)// p1, p2 修改互不干扰,值拷贝
}
  • 输出结果:p1 != p2

方式二

  • 推导方式创建结构体变量
  • 结构体对象空间都是独立的,互不干扰
package main

type Person struct {
    Name string
    Age int
}

func main() {
    p1 := Person{}
    p1.Name = "张三"
    p2 := Person{}
    p2 = p1
    p2.Name = "李四"
    fmt.Println(p1, p2)// p1, p2 修改互不干扰,值拷贝
}
  • 输出结果:p1 != p2

方式三

  • 指针方式创建指针结构体变量
  • 变量存储的是结构体存储的地址
package main

type Person struct {
    Name string
    Age int
}

func main() {
    p1 := &Person{}
    p1.Name = "张三"
    p2 := &Person{}
    p2 = p1
    p2.Name = "李四"
    fmt.Println(p1, p2)
}
  • 输出结果:p1 == p2

方式四

  • new 关键字创建的是指针变量,故与方式三一致
package main

type Person struct {
    Name string
    Age int
}

func main() {
    p1 := new(Person)
    p1.Name = "张三"
    p2 := &Person{}
    p2 = p1
    p2.Name = "李四"
    fmt.Println(p1, p2)
}
  • 输出结果:p1 == p2