go语言可变参数和interface{}使用

2023-11-01

go语言也支持可变参数,使用形式:func 函数名(参数名...类型) 返回值 {},跟正常其他函数声明不同的是,在参数名和类型中间加了...符号。当需要传递的是不定类型和任意类型时,可以用interface{}代替,类似于c语言中的void *

下面这个例子演示了可变参数的使用,传递的是interface{}任意类型,并通过switch case语句,对可变参数里的每一个元素使用.(type)函数来判断具体类型,进行各自处理。

package main

import (
    "fmt"

)

//func myfunc(args...int) //这样就是int类型的可变参数,
//func myfunc(args...string) //这样就是string类型的可变参数,
func myfunc(args...interface{}) string {//用 interface{} 传递任意类型数据是Go语言的惯例用法,类似于void *
	tstr,str:="",""
    for _, arg := range args {
		// 对arg进行类型断言
		switch arg.(type) { //.(type)是判断interface{}的具体类型,只能在switch case语句中使用。
			case int:
			//使用 fmt.Sprintf格式化函数配合%v,可以将 interface{} 格式的任意值转为字符串。
			tstr=fmt.Sprintf("这是int %v\n",arg)
			case float64:
			tstr=fmt.Sprintf("这是float64 %v\n",arg)
			case bool:
			tstr=fmt.Sprintf("这是bool %v\n",arg)			
			case string:
			tstr=fmt.Sprintf("这是string %v\n",arg)						
			default:
			tstr=fmt.Sprintf("其他 %v\n",arg)
		}
		str+=tstr//累加到str
    }
	return str
}

func main() {

	fmt.Println(myfunc(1, 3, true,"abc", 13.5,[3]int{1,2}))

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言可变参数和interface{}使用 的相关文章

  • 使用 Golang 通道处理 HTTP 请求

    我正在尝试构建一个简单的 Golang Appengine 应用程序 它使用通道来处理每个 http 请求 原因是我希望每个请求执行合理的大型内存计算 并且每个请求都以线程安全的方式执行 即来自并发请求的计算不会混合 这一点很重要 本质上
  • foo.Name undefined(类型接口{}没有字段或方法名称)

    我使用本机 golang 包 container list 来管理堆栈中的 inotify 事件 当我访问堆栈的项目时 我的类型失败 我认为 import golang org x exp inotify container list lo
  • formatFloat :将浮点数转换为字符串[重复]

    这个问题在这里已经有答案了 http golang org pkg strconv http golang org pkg strconv http play golang org p 4VNRgW8WoB http play golang
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 如何使用golang中通过引用传递的索引访问切片中的元素

    我将切片的引用传递给函数 并且我正在函数内的切片中进行更改 我还尝试使用索引访问切片中的元素 它在 golang 中抛出异常 通过引用传递的索引访问切片中的元素的最佳方法是什么 您可以在此处找到示例代码 参考 http www reddit
  • Go 中数组的嵌套结构

    我已经开始使用https mholt github io json to go https mholt github io json to go 将 API JSON 转换为 go 结构 我真的很喜欢它 但是我对如何初始化如下所示的报告定义
  • Ajax 将文件上传到内容类型为 Multipart 的 GoLang 服务器

    我正在尝试使用多部分表单将音频文件上传到 Golang 服务器 然而 Go 返回错误 multipart NextPart bufio buffer full 我相信这表明我的 Javascript 请求中存在不属于多部分格式的内容 这是我
  • 初始化嵌套匿名结构

    我有一个 json 作为 fields time id status customerId additionalDetail pageInfo start 0 rows 1000 我想将我的结构编组到上面的 json 并创建如下结构 typ
  • 从 []byte 到 char*

    我想包装一个 C 函数 它需要一个char 指向非空字节缓冲区 的第一个元素 我正在尝试使用 CGo 将其包装在 Go 函数中 以便我可以将其传递给 byte 但我不知道如何进行转换 C 函数签名的简化版本是 void foo char c
  • for 循环初始值设定项中的结构

    知道为什么 for 循环初始值设定项中的这个结构表达式在编译时会出现语法错误吗 在这种情况下 指向结构的指针工作正常 但 ofc 我需要如下所示的局部变量 感谢您的建议 type Request struct id int line byt
  • GOPATH值设置

    我用go1 3 1 windows amd64 msi安装go 安装后GOROOT是默认设置 我发现 D Programs Go bin 在 PATH 中 然后我创建一个 GOPATH 环境变量 使用 go get 命令时 出现错误 软件包
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • 匿名结构和空结构

    http play golang org p vhaKi5uVmm http play golang org p vhaKi5uVmm package main import fmt var battle make chan string
  • 打印到 stdout 会导致阻塞的 goroutine 运行吗?

    作为一个愚蠢的基本线程练习 我一直在尝试实现理发师睡觉的问题 http en wikipedia org wiki Sleeping barber problem在戈兰 对于通道来说 这应该很容易 但我遇到了一个 heisenbug 也就是
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req
  • 如何将 int[] 转换为 uint8[]

    所以 我需要你的帮助 我找不到关于该主题的任何内容 Golang 是一门刚刚诞生的语言 所以对于像我这样的新手来说很难快速找到答案 预先声明的 Goint类型大小是特定于实现的 32 位或 64 位 数字类型 http golang org
  • 复杂数据类型作为 Go 中映射的键

    我正在尝试在 Go 中创建一个由大整数作为键的映射 effective Go 明确指出 结构体 数组和切片不能用作映射键 因为这些类型上没有定义相等性 这是有道理的 我当然可以将大整数转换为字符串并使用字符串作为键 但我在这里寻找更通用的解
  • Golang 正则表达式在字符串之间替换

    我有一些可能采用以下形式的字符串 MYSTRING MYSTRING n MYSTRING n MYSTRING randomstringwithvariablelength n 我希望能够将其正则表达式为MYSTRING foo 基本上替
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan

随机推荐

  • 如何用MATLAB读取csv文件

    如何使用Matlab读取csv文件 在Matlab中 有专门读取csv文件的函数 csvread 在Matlab的帮助文档中 有对这个函数的详细解释 csvread 函数有三种使用方法 1 M csvread filename 2 M cs
  • stm32学习笔记-8 DMA直接存储器读取

    8 DMA直接存储器读取 文章目录 8 DMA直接存储器读取 8 1 DMA简介 8 2 实验 DMA数据转运 存储器到存储器 8 3 实验 DMA AD多通道 外设到存储器 注 笔记主要参考B站 江科大自化协 教学视频 STM32入门教程
  • 【UE4】UE4连接MySQL

    一 使用MySQLIntegration插件连接Mysql Update Data from Query Async组件后面必须再跟一个其他的节点 节点才能正常执行 UE4 C 编程中不能出现私有私有变量 UE4 C 静态变量 MySQL
  • LinkedHashSet集合底层源码解析

    Java源码系列 下方连接 http t csdn cn Nwzed 文章目录 前言 一 LinkedHashSet简介 二 LinkedHashSet add 方法底层解析 第一次添加元素 第二次添加元素 添加元素重复元素 总结 前言 L
  • 情感分类——TextCNN

    序 Text CNN出自 Convolutional Neural Networks for Sentence Classification 这篇经典论文 由New York University的Yoon Kim大佬发表 作为文本分类的必
  • Unity中的MonoBehavior类

    目录 Awake OnEnable Start Update LateUpdate OnDisable Unity中的MonoBehavior类 声明了游戏循环中的各类 回调函数 MonoBehaviour 是一个基类 所有 Unity 脚
  • 离散数据和连续数据及相关内容的个人理解

    目录 离散数据和连续数据的定义 离散数据 连续数据 离散分布和连续分布的采样 离散分布采样 连续分布采样 离散数据和连续数据的定义 离散数据 例 a man is playing 离散数据取值可以具有有限个或无限可数个值 这个值可以用来定性
  • 文件已在资源管理器中打开无法删除解决方法

    刚刚出现的问题 不知道为什么很久没有运行的百度网盘运行不了 一删重装为快 但是就出现了文件已在资源管理器中打开无法删除的苦难 重启电脑也试过了无法删除 所以有了下面的方式解决问题 首先将你所在文件的目录复制 打开任务管理器 ctrl alt
  • [UE4][C++]保存Texture2d到本地

    1 官方蓝图有接口 Export Texture 2D 但是有些Texture 2D不支持 会报警 会有这个警告 Unsupported source texture format provided 2 自定义 先获取data 然后把dat
  • pic程序SD24XX读写演示程序

    本程序根据网友提供的pic程序进行修改 未进行测试 仅供参考 e mail FAE whwave com cn TEL 0755 83114387 2014 07 01 include
  • [R]第二节 对象介绍与赋值运算

    前言 R 创建 控制的实体 entity 称为对象 object 向量 vector 矩阵 matrix 数组 array 数据框 data frame 列表 list 因子 factor 函数 function 通过以上实体定义的更为一般
  • ROS的3D建模与仿真

    1 实验目的及要求 掌握 ROS 中 3D 模型 URDF 的创建方法 2 实验器材 PC 机 ROS 系统 ubuntu18 04 ROS melodic 3 内容与步骤 建立一个简单的移动机器人小车 过程中尽量使用简单的元素 移动机器人
  • HashSet可能存在的内存泄漏问题

    文章目录 HashSet可能存在的内存泄漏问题 问题描述 问题示例 C 问题解释 HashSet可能存在的内存泄漏问题 问题描述 如果往HashSet hs添加一个对象A 然后更改对象A中参与Hash计算的属性 将导致HashSet产生内存
  • 在Windows上访问linux的共享文件夹

    1 在Linux服务器上安装Samba并启动 yum install samba y systemctl start smb systemctl enable smb 2 创建samba用户并设置密码 注意用户需要系统里本来就创建好的用户
  • 详细解析Java中抽象类和接口的区别

    在 Java 语言中 abstract class 和 interface 是支持 抽象类 定义的两种机制 正是由于这两种机制的存在 才赋予了Java强大的 面向对象能力 abstract class和interface之间在对于抽象类定义
  • Postgresql数据库转义字符

    产生问题 Postgresql数据库运行下面insert命令 insert into mapping mac brand id mac brand values 777 D86595 Toy s Myth Inc 提示下面的警告 Warni
  • 用vue+videojs实现播放rtmp遇到的问题

    代码结构如下 html js 问题呈现 后来经过百度 是flash的问题 解决办法 点击浏览器如上图标 将flash选择为允许 更改之后会提示重新加载 点击点击重新加载即可
  • 关于DSP28335 AD采样的两个问题

    问题1 当DSP28335的AD采样触发信号soc来自于ePWM1时 这时的采样周期是PWM的周期还是AD硬件本身经过ACQ PS 3 0 和ADCTRL 7 分频得到的 问题2 当要对同一个通道进行重复采集1024个数据时 soc信号的来
  • 解决EasyExcel不支持解析List以及实体类对象问题

    1 解决EasyExcel不支持解析List以及实体类对象问题 1 EasyExcel支持的类型 public enum CellDataTypeEnum STRING DIRECT STRING NUMBER BOOLEAN EMPTY
  • go语言可变参数和interface{}使用

    go语言也支持可变参数 使用形式 func 函数名 参数名 类型 返回值 跟正常其他函数声明不同的是 在参数名和类型中间加了 符号 当需要传递的是不定类型和任意类型时 可以用interface 代替 类似于c语言中的void 下面这个例子演