首页 > 其他分享 >golang常见用法

golang常见用法

时间:2023-10-19 11:23:24浏览次数:34  
标签:元素 转换 struct 常见 用法 golang https interface

结构体数组与接口数组转换

如果想把[]struct转为[]interface,我们发现直接赋值会报错。

理论上interface可以转换任何数据,为什么结构体数组不可以呢?这是因为interface的设计导致的,如果能理解interface的底层实现,就能很清楚知道如何转换了。

如图所示,与C++的虚函数类似,interface保存了两部分内容,一部分是数据类型,另一部分是数据,所以可以被转化为任何数据。[]struct是被当作一个整体看待的,[]struct与struct,或者与int都没区别,表示一种数据类型。[]struct可以转换为interface,但是[]interface表示有一组interface,一个[]struct,当然不可能转化为多个interface,也就不能转化为[]interface。

实际上我们的意思是把[]struct中的每个元素作为独立个体,再对应[]iterface中的每个interface。既然理解到这一层,就可以很好的实现转换了:

// 根据[]struct x的元素个数,创建对应的[]interface y
y := make([]interface{}, len(x))

// 遍历[]struct x中的每个元素,转换为[]interface y中的每个元素
for i, v := range x {
    y[i] = v
}

https://go.dev/doc/faq#convert_slice_of_interface
https://research.swtch.com/interfaces
https://stackoverflow.com/questions/44319906/why-golang-struct-array-cannot-be-assigned-to-an-interface-array

标签:元素,转换,struct,常见,用法,golang,https,interface
From: https://www.cnblogs.com/studywithallofyou/p/17774302.html

相关文章

  • golang生成uuid
    1,借助linux系统命令/usr/bin/uuidgen1.1代码packagemainimport("fmt""log""os/exec")funcmain(){out,err:=exec.Command("uuidgen").Output()iferr!=nil{log.Fatal(err)}fmt.......
  • SSH服务常见问题及报错汇总
    SSH常见问题汇总目录ssh知识要点2什么是ssh服务3ssh的软件包3客户端软件包3服务端软件3SSH服务配置文件说明3ssh_config和sshd_config配置文件区别3服务端优化配置选项7ssh入侵案例说明8IP如何防止SSH登录入侵小结:8修改服务器默认监听端口报错8ssh登录失败,报错:Pseudo-t......
  • 关于java的常见异常处理
    Java中常用的异常处理包括以下几种类型的异常:编译时异常、运行时异常和错误。在Java中,异常处理是通过异常处理机制来进行的。当程序运行过程中出现异常时,程序会根据异常处理机制来决定如何处理异常,以保证程序的稳定运行。 1.编译时异常(CheckedExceptions)编译时异常在程序编......
  • 【ORCAL】oracle 数据库中case when 语句的用法详解
     今天向大家介绍oracle数据库中casewhen语句的用法详解,主要包括它的用法详解、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值。CASEWHEN表达式有两种形式1--简单Case函数23CASEsex4WHEN'1'THEN'男'5WHEN'2'THEN......
  • C++常见入门题题解
    前言因为本人目前比较菜,所以给出的题解都是按照自己的学习进度来的,所以难度是一个循序渐进的过程,由于本人水平有限,望读者能够指出谬误,共同进步。回文数输出#include<bits/stdc++.h>//万能头usingnamespacestd;intmain(void){vector<int>font;//定义一个整型的向......
  • NOI Linux 2.0 用法以及 Windows 下的对拍
    一、NOILinux2.0用法打开终端。Ctrl+Alt+T进入超级管理员。sudosu列出当前文件夹下的子目录。ls进入下层文件夹a。cda在当前目录(下面同样)新建一个文件a.cpp。toucha.cpp编辑a.cpp。gedita.cpp编译a.cpp。g++.exea.cpp-oa.exe......
  • Unity 常规用法
    刚体Rigidbody控制游戏对象的物理行为//获取刚体属性GetComponent<Rigidbody>();聚焦双击、F键窗口控制ALT+鼠标左键鼠标中键鼠标右键滑轮点击方向键移动物体E键调整角度场景视野透视视野、平行视野世界坐标原点小球设置0/0/0坐标Unity常用组件Transform:控制......
  • Spring MVC,Mybatis常见问题
    如果您面试一个只做过SpringMVC+MyBatis项目的候选人,您可能会问一些问题来评估其在这两个技术上的了解和经验。以下是一些可能的问题及其答案:什么是SpringMVC和MyBatis?它们在项目中的作用是什么?答:SpringMVC是一个基于Spring框架的用于构建Web应用程序的模块,它使用MVC(Model-......
  • 02_常见内置数据类型
    常见内置数据类型标签(tag):Python,数据类型,可变对象,不可变对象,可哈希对象,可迭代对象,可遍历对象参考资料:Python文档:内置类型(Build-inTypes)Python文档:数据模型-对象、值与类型Python文档:术语对照表-可哈希Python文档:属于对照表-可迭代对象Python文档:逻辑值检测Pyt......
  • Cocos Creator 常见错误排查方法
    CocosCreator新手开发的时候经常会遇到一些错误不知道如何解决,今天把这些错误总结一下,下次遇到的时候,自己知道如何分析。 到底谁为null或undefine 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习......