Go中的泛型和反射以及序列化

news2025/1/16 19:55:22

嗨喽,小伙伴们,好几没有更新了,最近在搞一些云原生的东西,docker , k8s 搞得我暂时迷失了方向,不过我举得搞IT吗,就是在不断尝试,搞一下当下最新的技术,不然 …

在这里插入图片描述

GO中的泛型与继承

搞过java的都知道泛型与继承,在go中也开始搞泛型与继承了(在go1.8之后)

先看代码–>>

package main

import "fmt"

/*type FanXing interface {
	type int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64,
		uintptr, float32, float64, complex64, complex128, string
}
*/


func printData[T any](s T) {
	fmt.Printf("%T  --%v\n", s,s)
}

func FUN(a interface{}) {
	switch a.(type) {
	case int:
		fmt.Printf("%T  --%v\n", a,a)
		break
		//fallthrough
	case float64:
		fmt.Printf("%T  --%v\n", a,a)
		break
	case string:
		fmt.Printf("%T  --%v\n", a,a)
	}

}

//声明一个泛型切片

type Vector[T any][]T
func FunTest[T any](s []T){
	for _,v:=range s{
		fmt.Printf("%v\n",v)
	}
}

func main() {
	printData[string]("Hello")
	printData[int](125)
	printData[float64](128.90)

	FUN(12)
	FUN("你好")

	//t:=Vector[int]{78,89}
}

声明泛型----可以用接口的形式来sheng名一个泛型,也可以用any来声明,不过这两种是有区别的;

Go中的反射

什么是反射?

我们接触过java的同学都会知道,java中的反射是怎么一回事---->>在运行期间去获得对象的类型信息以及其他一些信息;

在go中什么时候使用反射呢?

这个跟java中有些不同的地方是—>>
函数的参数类型是 interface{},那么在这个时候需要在运行时根据原始数据类型进行不同的处理 ,在运行时根据某些条件去动态的调用哪一些函数;

我们先来看一个案例—>>go中序列化
为什么要先看序列化?是不是不理解?
那就百度呀----嘻嘻

Go 语言中的 JSON
序列化过程不需要被序列化的对象预先实现任何接口,它会**通过反射获取结构体或者数组中的值并以树形的结构递归地进行编码,**标准库也会根据 encoding/json.Unmarshal 中传入的值对 JSON 进行解码。

package main
//导入包信息
import (
//go中自带的json 包 数据信息
	"encoding/json"
	"fmt"
)

func main()  {
	fmt.Println("我要使用go实现反射")
	jsonTest()
}

//定义一个结构体
type User struct {
	Name string `json:"Ming"`
	Age  int    `json:"Nisan"`
	Sex  byte   `json:"gender"`
	//Sex 是byte类型,后面跟的是tag 表示该字段也可以用gender表示,并优先使用该字段
}
func jsonTest()  {
//来一个对象
	user:=User{
		Name: "老舍",
		Age:  88,
		Sex:   1,
	}
//json序列化
	marshals ,err:= json.Marshal(user)
		if err!=nil{
			return
		}
	fmt.Println(string(marshals))
}

反射的基础数据类型

前面提到过go中反射是在运行时才知道数据的信息和该调用那个函数,也就是说原理跟java中的一样,在运行时才能知道对象的一些信息;

反射中的基础数据类型—>>Type和Value

在这里插入图片描述

通过interface{}调用TypeOf()可以转换为Type类型,
Type可以通过New()来转换为Value,
Value可以通过Interface转为interface{},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【记录】PyCharm 安装 preprocess 模块(库)|| 在 PyCharm 中安装 preprocess 失败,故而在 终端 安装

preprocess.py 针对的是处理许多 文件类型。它工作的语言包括:C、Python、 perl、tcl、xml、javascript、css、idl、tex、fortran、php、java、shell 脚本(bash、csh等)和c。预处理可以作为 命令行应用程序和作为python 模块。 目录一、在 Py…

矩阵论复习提纲

矩阵论复习提纲 第一章 矩阵相似变化 1、特征值与特征向量 A ∈ Cnxn 若存在 λ ∈ C 满足 Ax λx 则 λ 为 A 的特征值 可转换为 (λI - A)x 0 特征多项式 :det(λI - A) 特征矩阵: λI - A 2、相似对角化 1. 判断可对角化…

VMware Fusion 13 正式版终于来了

千呼万唤,经历两年之久,VMware终于在Fusion 13正式版中支持了Apple Silicon 版Mac,此次发布的Fusion是Universal版本,也就是一个安装包同时适配Intel Mac及Apple Silicon (M1,M2)Mac。想起我两年…

疑难杂症集合(备忘)

sshd:no hostkeys available 解决过程: #ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key #ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key #/usr/sbin/sshd 如果上述两个文件存在,仍然出现这个错误,那么试试 chmod 600 上述两个文件。之…

01-Python的基本概念

01-Python的基本概念 Python是一种直译式(Interpreted)、面向对象(Object Oriented)的程序语言’它拥有完整的函数库’可以协助轻松地完成许多常见的工作。 所谓的直译式语言是指’直译器(InteIpretor)会将…

诊断故障码(Diagnostic Trouble Code-DTC)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文将由浅入深的介绍DTC(Diagnostic Trouble Code)。 关联文章: $19服务:DTCStatusMask和statusofDTC bit 定义 19服务List 文章目录诊断协议那些事儿DTC(Diagnos…

Python pyenv install 下载安装慢(失败)完美解决

pyenv 下载原理就是将例如 Python-3.10.3.tar.xz 这样的压缩文件下载到本地缓存文件或临时文件,然后解压出来使用。 由于下载速度或者网不行,那么就跳过 pyenv 下载,自己下载,然后放到它的缓存文件,这样不就行了。 1…

3.np.random

1. np.random.seed np.random.seed()函数用于生成指定随机数。 seed()被设置了之后,np.random.random()可以按顺序产生一组固定的数组,如果使用相同的seed()值,则每次生成的随机数都相同。 如果不设置这个值,那么每次生成的随机数…

[附源码]计算机毕业设计JAVA基于Java的护肤品网站

[附源码]计算机毕业设计JAVA基于Java的护肤品网站 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

【MySQL进阶】表的增删改查操作(CRUD)+(SQL执行顺序)

1. 新增(复制数据)2. 查询 - 进阶2.1 聚合查询2.2 group by2.3 having2.4 联合查询2.4.1 内连接2.4.2 外连接2.4.3 自连接2.4.4 子查询2.4.5 合并查询3 SQL的执行顺序(where...)1. 新增(复制数据) 语法 -- 字段名 列名 -- 将表2的数据复制到表1中 -- 两张表的结构要一样 i…

前端知识点

1.HTML 2.CSS 3.js 4.VUE 5.vUE的基本指令 6.VUE案例 7.ELEMENT HTML 设置图片 <img src"图片地址">让图片居中显示<center><img src"图片地址" width"270" height"900"></center>有序列表 <!--有序 ty…

Spring框架技术的核心与设计思想

目录 1. Spring 是什么? 1.1 什么是容器? 1.2 什么是 IoC ? 2. 传统式开发 3. 控制(权)反转式开发 4. 理解Spring 核心 - IoC 1. Spring 是什么? Spring 的全称是 Spring Framework, 它是一种开源框架, 2002 年, Rod Jahnson 首次推出了 Spring 框雏形 interface21…

[UE笔记]客户端服务器时间同步

内容系看教程所做的笔记 时间 往返时间&#xff08;RTT, Round-Trip Time&#xff09;&#xff1a;数据从客户端通过网络发送到服务器&#xff0c;再从服务器返回到客户端所需的时间。 首先客户端应当知道服务端的当前时间。 服务器启动时间总是先于客户端的&#xff0c;客户…

【学习OpenCV4】OpenCV入门精讲(C++/Python双语教学)

大家好&#xff0c;我在CSDN开的OpenCV课程已经开课了&#xff0c;入口如下&#xff1a; OpenCV入门精讲&#xff08;C/Python双语教学&#xff09; 课程开始快一周了&#xff0c;收到了广大同学们的欢迎。 &#xff08;1&#xff09;评分很高&#xff1b; &#xff08;2&#…

从Clickhouse 到 Snowflake: 云原生

云原生Clickhouse优势概述 以Clickhouse为基础&#xff0c;借鉴Snowflake等系统的设计思路&#xff0c;打造一款高性能的云原生OLAP系统&#xff0c;为用户提供多场景下的一站式的数据分析平台。 简单、易维护&#xff1a;集群管理、统一共享分布式调度服务高可用、可扩展&am…

T292114 [传智杯 #5 练习赛] 清洁工

题目描述 有一个 n\times nnn 的地块&#xff0c;一个连续 ii 分钟没人经过的地面在第 ii 分钟会落上 ii 个单位的灰&#xff0c;有人经过时不会落灰但灰也不会清零&#xff0c;在人走后第一分钟又会落上一个单位的灰&#xff0c;以此类推。你在这个 n\times nnn 的范围内移动…

深度可分离卷积神经网络与卷积神经网络

在学习语义分割过程中&#xff0c;接触到了深度可分离卷积神经网络&#xff0c;其是对卷积神经网络在运算速度上的改进&#xff0c;具体差别如下&#xff1a; 一些轻量级的网络&#xff0c;如mobilenet中&#xff0c;会有深度可分离卷积depthwise separable convolution&#…

Xamarin.Andorid实现界面弹框

目录1、使用系统自带的样式1.1 具体实现1.2 效果2、自定义样式的实现2.1 预期效果2.2 具体实现2.3 相关知识3 代码下载4、参考在App的实际使用中&#xff0c;一定会出现弹框选择的情况。如图所示&#xff1a; 因此非常有必须学会及使用弹框的功能&#xff0c;因此本次学习Xama…

miui刷机完整教程

风险提示&#xff1a;刷机有可能损害手机&#xff0c;本作者不承担因为使用本方法刷机引起的任何问题&#xff0c;请谨慎刷机。 1.选择[刷机包](https://web.vip.miui.com/page/info/mio/mio/detail?postId37093637&app_versiondev.20051) 2.解BL锁 浏览器打开http://www…

SSM整合(二)

SSM框架整合之mybatis查询的两个例子 1 准备工作 1.1 创建查询工作所需要的实体类Emp package com.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import tk.mybatis.mapper.annotation.KeySql; import javax.persisten…