首页 > 其他分享 >go自动初始化结构体成员指针

go自动初始化结构体成员指针

时间:2024-10-12 09:50:26浏览次数:8  
标签:初始化 struType Name fields Stru reflect field go 指针

type Stu struct {
    Id  *int
    Id1 *int32
    Id2 *int64
    B   *bool
}

func (this *TestBeanSuite) Test010_IniStru() {
    var stu = &Stu{}
    baseutils.InitStruNilPtrField(stu)
    golog.Info(stu)
}
2024-10-11 16:49:16.190 [INFO] {"Id":0,"Id1":0,"Id2":0,"B":false}
 
func InitStruNilPtrFields(Stru any) {

    var fields = FindStructNilPtrFields(Stru)
    for _, field := range fields {

       switch field.Type.Elem().Kind() {
       case reflect.Int:
          xreflect.SetField(Stru, field.Name, new(int))
       case reflect.Int32:
          xreflect.SetField(Stru, field.Name, new(int32))
       case reflect.Int64:
          xreflect.SetField(Stru, field.Name, new(int64))
       case reflect.String:
          xreflect.SetField(Stru, field.Name, new(string))
       case reflect.Bool:
          xreflect.SetField(Stru, field.Name, new(bool))
       }
    }

}
func FindStructNilPtrFields(Stru any) []reflect.StructField {

    var fields = make([]reflect.StructField, 0)
    if Stru == nil {
       return fields
    }
    if !IfTypeStru(reflect.TypeOf(Stru)) {
       return fields
    }
    value := reflect.ValueOf(Stru)
    if value.Kind() == reflect.Ptr {
       value = value.Elem()
    }
    var struType = reflect.TypeOf(Stru)
    if struType.Kind() == reflect.Ptr {
       struType = struType.Elem()
    }

    for i := 0; i < struType.NumField(); i++ {
       var field = struType.Field(i)
       if field.Type.Kind() == reflect.Ptr && value.FieldByName(field.Name).IsNil() {
          fields = append(fields, field)
       }
    }

    return fields

}

 

 

标签:初始化,struType,Name,fields,Stru,reflect,field,go,指针
From: https://blog.csdn.net/leijmdas/article/details/142858485

相关文章

  • Django的模板语法
    Django的模板语法1、初步认识2、原理1、初步认识本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。在views.py中用字典(键值对)的形式传参,在html文件中用两个花括号来显示单独的值列表、元组等数据类型的数据可通过点来访问索引,也可利用for循环、if......
  • Django项目的创建及说明(详细图解版)
    Django项目的创建及说明1、安装Django2、创建项目2.1、利用终端创建项目2.2、利用Pycharm企业版创建项目3、默认文件介绍1、安装Django在终端输入下述命令行。pipinstalldjango安装成功后执行如下命令查看Django是否安装好,若正确显示出Django版本号则安装成功......
  • 2023 Benelux Algorithm Programming Contest (BAPC 23)
    A-\texttt题意\(n\)个软件包,已知大小,可以同时下载\(k\)个,已经下载好了\(m\)个,选\(k\)个下载使得下载完后进度最大,输出已完成进度所占百分比。思路选最大的\(m+k\)个。代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoid......
  • 基于django+vue+Vue汉服文化管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景汉服,作为中华民族传统文化的重要组成部分,承载着深厚的历史底蕴与民族情感。近年来,随着国潮文化的兴起,汉服逐渐从历史的尘封中走出,成为现代......
  • 基于django+vue+Vue汉服爱好聚集平台【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,随着中国传统文化的复兴,汉服作为中国古代服饰文化的瑰宝,逐渐受到越来越多年轻人的青睐。汉服爱好者们不仅在日常生活中穿着汉服,还积......
  • 基于django+vue+Vue海州影院管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和人们对文化娱乐需求的日益增长,影院管理逐渐从传统的人工模式向智能化、信息化方向转变。海州影院作为当地知名的......
  • const与一级指针
    const与一级指针在C/C++中,const关键字用于表示一个变量的值是不可改变的。通常,它修饰离它最近的类型,意思是它所修饰的部分不能被修改。根据它在声明中的位置,const可以修饰指针或者指针所指向的值。1.const修饰变量如果const修饰变量,则该变量是常量,不能被修改。con......
  • 基于django+vue+Vue哈尔滨学院新生入学系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和教育信息化的不断深入,高校新生入学流程逐渐由传统的人工操作向数字化、智能化转型。哈尔滨学院作为一所历史悠久......
  • 基于django+vue+Vue哈尔滨市彼岸速溶咖啡厂管理系统【开题报告+程序+论文】-计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景哈尔滨市彼岸速溶咖啡厂作为当地知名的咖啡生产企业,随着市场需求的不断扩大和企业管理要求的日益提高,传统的手工管理模式已难以满足其高效......
  • 基于django+vue+Vue哈尔滨海关进出口食品安全信息管理系统【开题报告+程序+论文】-计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球经济一体化的加速推进,国际贸易日益频繁,食品安全问题已成为全球关注的焦点。哈尔滨作为东北地区的重要口岸城市,其海关在保障进出口......