首页 > 其他分享 >golang打印指针切片/数组的值

golang打印指针切片/数组的值

时间:2023-07-28 18:23:46浏览次数:46  
标签:切片 Name val student fmt golang Student Age 指针

 

FmtSlice2String方法可以将指针切片的值打印处理
package main

import (
	"fmt"
	"reflect"
)

type Student struct {
	Name string `json:"name" cn:"名字"`
	Age  uint64 `json:"age" cn:"年龄"`
}

func main() {
	s := make([]*Student, 0)
	student1 := &Student{
		Name: "张三",
		Age:  18,
	}
	student2 := &Student{
		Name: "李四",
		Age:  20,
	}
	s = append(s, student1)
	s = append(s, student2)
	fmt.Printf("student1:%v\n", student1)  //student1:&{张三 18}
	fmt.Printf("student2:%+v\n", student2) //student2:&{Name:李四 Age:20}
	fmt.Printf("student:%+v\n", s)         //student:[0xc000092060 0xc000092078]
	fmt.Printf("student:%#v\n", s)         //student:[]*main.Student{(*main.Student)(0xc000092060), (*main.Student)(0xc000092 078)}
	fmt.Printf("student:%v\n", s)          //student:[0xc000092060 0xc000092078]
	fmt.Print(FmtSlice2String(s))          //Name:张三 Age:18 Name:李四 Age:20

}

func FmtSlice2String(x any) (res string) {
	val := reflect.ValueOf(x)
	if val.Kind() == reflect.Ptr {
		val = val.Elem()
	}
	switch val.Kind() {
	case reflect.Struct:
		typ := val.Type()
		//获取结构体里的名称
		for i := 0; i < typ.NumField(); i++ {
			field := typ.Field(i)
			res += field.Name + ":" + FmtSlice2String(val.Field(i).Interface()) + " "
		}
	case reflect.Slice, reflect.Array:
		for i := 0; i < val.Len(); i++ {
			res += FmtSlice2String(val.Index(i).Interface())
		}
	default:
		res += fmt.Sprint(x)
	}
	return
}

// 参考 https://www.bilibili.com/read/cv9164755/

 

标签:切片,Name,val,student,fmt,golang,Student,Age,指针
From: https://www.cnblogs.com/gz-wod/p/17588605.html

相关文章

  • Golang gRPC学习(05): retry重试
    什么是重试如果服务出现了错误,主要是网络,服务器出现了短暂异常的时候,该怎么办?我们都会人工或者自动的重新连接服务试试,看服务是否恢复可用了。这种重新进行连接服务的一种方式就是重试。如果是在微服务里,应该属于微服务治理的范畴。重试是处理网络服务出现暂时不可用的一种方......
  • golang技术降本增效的手段
    最近一年各大中小厂都在搞"优化",说到优化,目的还是"降本增效",降低成本,增加效益(效率)。技术层面,也有一些降本增效的常规操作。比如池化、io缓冲区技术golangC#eg.池化技术snnc.PoolObjectPool前端切图仔,归入前端资源池,随用随取字节数组缓冲区bytes.BufferLis......
  • numpy中的切片中的None含义
    pytorch的tensor同理。先说结论:None实际上是增加了一个维度,它不是原维度的索引。为什么引入None说一下我找原文档的心路历程:在numpy的官方文档里搜索“slice”,也就是切片,很容易就能找到关于slice的介绍:BasicslicingextendsPython’sbasicconceptofslicingtoNdime......
  • 【go语言】2.2.1 数组和切片
    数组和切片是Go语言中常用的数据结构,它们都可以存储多个同类型的元素。数组数组是具有固定长度的数据类型,它的长度在定义时就已经确定,不能随意改变。你可以使用以下方式定义一个数组:vararr[3]int这段代码定义了一个长度为3的 int 类型数组 arr。你也可以在定义时初......
  • Golang安装
    目录Go安装下载安装GoGo安装下载安装Go地址:https://studygolang.com/dl1、根据系统来选择下载包。2、我是Window,所以直接下载windows的安装包来安装。3、在控制台窗口输入“goversion”可查看Go版本,检测是否安装成功。4、配置环境变量。Go需要一个安装目录,还需......
  • Golang之工作区workspace
    快速开始创建工作区写一个最简单的基础项目实际演练一下 Goworkspace。首先,创建 workspace 工作区。$:mkdirworkspace$:cdworkspace$:goworkinit 完成以上步骤后,工作区目录就会出现一个新的文件 go.work .内容是这样的:go1.18因为工作区暂时是空的,所......
  • EnableHeaderCheckBox导致空指针
    GridViewCheckBoxColumn以CheckBox的形式显示、编辑bool值,实现行选中效果。如果需要在表头添加全选框,可以将EnableHeaderCheckBox设置为true:privatevoidAddCheckColumn(){checkColumn=newGridViewCheckBoxColumn();checkColumn.Name="Select";checkColum......
  • Golang中结构体映射mapstructure库深入详解
    mapstructure用于将通用的map[string]interface{}解码到对应的 Go 结构体中,或者执行相反的操作。很多时候,解析来自多种源头的数据流时,我们一般事先并不知道他们对应的具体类型。只有读取到一些字段之后才能做出判断 +目录在数据传递时,需要先编解码;常用的方式是JSON编解码......
  • 指针DAY3
    指针3指针和多维数组  代码:#include<stdio.h>intmain(){intC[3][2][2]={{{2,5},{7,9}},{{3,4},{6,1}},{{0,8},{11,13}}};printf("%d%d%d%d\n",C,*C,C[0],&C[0][0]);p......
  • 双指针/位运算/离散化/区间和并
    双指针两个指针指向两个不同的序列两个指针指向同一个序列(归并排序,快速排序)主要作用:将暴力O(n^2)遍历通过两个指针的某种单调性质优化到O(n),也就是说将内层循环变量j通过与外层循环变量i的关系,将内层循环次数降低不定次模板:for(inti=1;i<n;++i){ while(j<i&&......