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格式“占位符”


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM