Go输出带指针的结构体

Go输出带指针的结构体

1、场景

当结构体带指针时,输出结构体,指针类型输出的是地址,而不是具体的值,例如

package main

import "fmt"

// Student 学生信息
type Student struct {
   Name *string
   Age  *int
   Sex string
}

func main() {
   name:="韩非"
   age:=18
   sex:="男"
   student:=Student{
      Name: &name,
      Age:  &age,
      Sex:  sex,
   }
   fmt.Printf("学生信息是:%v\n",student)
   fmt.Printf("学生信息是:%+v\n",student)
   fmt.Printf("学生信息是:%#v\n",student)
   fmt.Printf("学生信息是:%s\n",student)
}

输出是这样子的

image-20211019111547499

2、输出具体值,而不是地址

可以通过自定义结构体的String()方法进行输出

package main

import "fmt"

// Student 学生信息
type Student struct {
   Name *string
   Age  *int
   Sex string
}

func (s Student) String() string {
   return fmt.Sprintf("姓名是:%s,年龄是:%d,性别是:%s",*s.Name,*s.Age,s.Sex)
}
func main() {
   name:="韩非"
   age:=18
   sex:="男"
   student:=Student{
      Name: &name,
      Age:  &age,
      Sex:  sex,
   }
   fmt.Printf("学生信息是:%v\n",student)
   fmt.Printf("学生信息是:%+v\n",student)
   fmt.Printf("学生信息是:%#v\n",student)
   fmt.Printf("学生信息是:%s\n",student)
}

输出是

image-20211019112033912

PS:可以看到用%v,%+v,%s都正确输出信息了,而%#v不行,因为%#v是相应的Go语法表示,因此不行,具体可以参考golang fmt格式“占位符”

posted @ 2021-10-19 11:26  南风丶轻语  阅读(485)  评论(0编辑  收藏  举报