登录 主页

go - 匿名结构体

2024-08-04 09:01AM

参考:https://www.topgoer.com/go/结构体

1.匿名结构体

在定义一些临时数据结构等场景下还可以使用匿名结构体

package main
import "fmt"

func main() {
  var user struct {
    Name string;
    Age int
  }
  user.Name = "wangli"
  user.Age = 18
  fmt.Println("user:", user)
  fmt.Printf("%#v\n:", user)
}

运行结果如下:

$ go run struct_type_anonymous.go
user: {wangli 18}
struct { Name string; Age int }{Name:"wangli", Age:18}

1.1创建指针类型结构体

可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址。格式如下:

var p2 = new(person)
fmt.Printf("%T\n", p2)     //*main.person
fmt.Printf("p2=%#v\n", p2) //p2=&main.person{name:"", city:"", age:0}

从打印的结果中我们可以看出p2是一个结构体指针。

需要注意的是在Go语言中支持对结构体指针直接使用.来访问结构体的成员。

package main
import "fmt"

type person struct {
  name string
  city string
  age int
}

func main() {
  var p1 person

  p1.name = "lilei"
  p1.city = "北京"
  p1.age = 18

  fmt.Println("p1:", p1)
  fmt.Printf("p1=%#v\n", p1)

  var p2 = new(person)
  p2.name = "测试"
  p2.age = 17
  p2.city = "上海"
  fmt.Printf("p2=%T\n", p2)
  fmt.Printf("p2=%#v\n", p2)

输出结果如下:

p1: {lilei 北京 18}
p1=main.person{name:"lilei", city:"北京", age:18}
p2=*main.person
p2=&main.person{name:"测试", city:"上海", age:17} 

1.2取结构体的地址实例化

使用&对结构体进行取值操作相当于对该结构体类型进行了一次new实例化操作

package main
import "fmt"

type person struct {
  name string
  city string
  age int
}

func main() {

  p3 := &person{}
  fmt.Printf("%T\n", p3)
  fmt.Printf("p3=%#v\n", p3)
  p3.name = "博客"
  p3.age = 30
  p3.city = "深圳"
  fmt.Printf("p3=%#v\n", p3)

}

输出结果如下:

*main.person
p3=&main.person{name:"", city:"", age:0}
p3=&main.person{name:"博客", city:"深圳", age:30}

p3.name = "博客"其实在底层是(*p3).name="博客" 

 

返回>>

登录

请登录后再发表评论。

评论列表:

目前还没有人发表评论