Golang的[]interface{}为什么不能接收[]int?

news/2024/12/5 2:20:09/

在 Go 中,[]interface{} 和 []int 是两种不同的类型,虽然它们的底层数据结构都是切片,但是它们的元素类型不同。[]interface{} 是一个空接口切片,可以容纳任意类型的元素,而 []int 是一个整数切片,只能容纳整数类型的元素。

  • 错误代码
package mainimport ("fmt"
)func demo(s []interface{}) {for _, ele := range s {fmt.Println(ele)}
}
func main() {s1 := []int{1, 2, 3}demo(s1)}
  • 报错如下:
# command-line-arguments
.\demo.go:14:7: cannot use s1 (variable of type []int) as []interface{} value in argument to demo

在类型系统中,[]interface{} 表示一个空接口切片,可以接受任意类型的值,但这并不意味着它能够自动转换为其他类型的切片。因此,你不能直接将 []int 类型的切片传递给一个接受 []interface{} 类型参数的函数,除非进行显式的类型转换。

要解决这个问题,你需要将 []int 类型的切片转换为 []interface{} 类型的切片,然后再传递给函数。你可以使用循环将 []int 中的每个元素逐个转换为 interface{} 类型并存储到 []interface{} 类型的切片中。
代码如下:

  • 使用循环
package mainimport ("fmt"
)func demo(s []interface{}) {for _, ele := range s {fmt.Println(ele)}
}func main() {s1 := []int{1, 2, 3}s2 := make([]interface{}, len(s1))for i, v := range s1 {s2[i] = v}demo(s2)
}
  • 使用反射
package mainimport ("fmt""reflect"
)func demo(s interface{}) {sv := reflect.ValueOf(s)svs := sv.Slice(0, sv.Len())for i := 0; i < svs.Len(); i++ {e := svs.Index(i).Interface()switch e.(type) {case string:fmt.Println("string", e)case int:fmt.Println("int", e)}}}
func main() {s1 := []int{1, 2, 3}demo(s1)
}

http://www.ppmy.cn/news/1423411.html

相关文章

Flattened Butterfly 扁平蝶形拓扑

Flattened Butterfly 扁平蝶形拓扑 1. 传统蝶形网络 Butterfly Topology2. 扁平蝶形拓扑 Flattened Butterfly3.On-Chip Flattened Butterfly 扁平蝶形拓扑应用于片上网络 Flattened Butterfly 扁平蝶形拓扑 扁平蝶形拓扑是一种经济高效的拓扑&#xff0c;适用于高基数路由器…

Simba:Mamba 增强了 U-ShiftGCN,用于视频中的骨骼动作识别

Simba&#xff1a;Mamba 增强了 U-ShiftGCN&#xff0c;用于视频中的骨骼动作识别 摘要IntroductionRelated WorksMethodologyDown-sampling ShiftGCN Encoder Experiments & ResultsDatasets Simba: Mamba augmented U-ShiftGCN for Skeletal Action Recognition in Video…

求交错且分母为阶乘的和(java)

import java.util.*; public class APP1{public static void main(String[] args){double sum0.0;int n0;int flag1;int fm1;Scanner reader new Scanner(System.in);System.out.println("请输入n的值&#xff1a;");nreader.nextInt();for(int i0;i<n;i){fm*i; …

极狐GitLab x LigaAI,AI 时代研发提效新范式

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 近日&#xff0c;极狐GitLab 和 LigaAI 宣布合作&#xff0c;双…

DDD学习

概述 学习一下DDD 什么是DDD DDD是领域驱动设计&#xff08;Domain Driven Design&#xff09;的缩写&#xff0c;是一种软件开发方法论。它强调将业务领域划分为多个紧凑的、自包含的领域&#xff0c;并通过强调领域模型的重要性来建立一个通用的语言和理解。 DDD鼓励开发…

京西商城——前端项目的创建以及前后端联调

创建VUE项目 在jingxi_shop_project文件夹中再创建一个 frontend 文件夹用来存放前端项目 /jingxi_shop_project/backend/jingxi_shop_project....../frontend/jingxi_shop_web......首先要安装 node.js 和 VUE cli&#xff0c;进入到项目目录内创建项目 vue create jingxi_…

2024 年 Web 前端开发趋势

希腊哲学家赫拉克利特认为&#xff0c;变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

前后端系统开发之——文章管理

原文地址&#xff1a;前后端系统开发之——文章管理 - Pleasure的博客 下面是正文内容&#xff1a; 前言 主要使用的技术&#xff1a;前端使用的是Vue.js&#xff0c;后端使用的是SpringBoot。如不雷同可以直接跳过了。 文章管理是这个系统最主要的一个功能也是最常规的一个功…