当前位置: 首页 > article >正文

3.3 Go函数可变参数

可变参数(variadic parameters)是一种允许函数接受任意数量参数的机制。它在函数定义中使用 ...type 来声明参数类型,所有传递的参数会被收集为一个切片,函数内部可以像操作普通切片一样处理这些参数。

package main

import "fmt"

func t1(ints ...int) { //可变参数使用方法

}

/*
func t2(ints ...int,s string ,i int) int { // 错误,... 可变参数必须在最后一个位置上
}

func t3(ints ...int,strings ...string)  { // 错误,... 可变参数必须在最后一个位置上,可变参数在形参列表中只能出现一次,不可以同时出现两个可变参数

}
func t4(x,y int, z sting, ints ...int ){ //正确,可变参数可以与普通参数混合使用,符合可变参数使用方法
}
*/
func t5(x, y int, ints ...int) {
    fmt.Printf("x: %d, y: %d\n", x, y)
    fmt.Printf("ints (type: %T): %v, length: %d, capacity: %d\n", ints, ints, len(ints), cap(ints))
}

func main() {
    fmt.Println("\nDemonstrating t5:")
    t5(10, 20, 30, 40, 50) // 调用 t5,传递普通参数和可变参数

    fmt.Println("\nDemonstrating t5 with no variadic arguments:")
    t5(10, 20) // 调用 t5,不传递可变参数

}

可变参数切片传递

func t8(x, y int, ints ...int) {
// 按位置传参
		//首先要满足位置参数的对应,剩余ints收集、ints将新建一个全新的切片
		普通参数按位置
	}
*/
}

func main (){
    
t8(1, 2, 3) //按照位置进行赋值,变长
f8 := []int{1, 2, 3, 4} // 定义切片,将数据存放在切片中
t8(1, 2, f8...) //f8... 方式实际上是没有心切片的创建。f8...只能用在可变参数中。

    }

日志记录函数通常需要接受多个参数来拼接日志内容。例如:



func logMessage(level string, messages ...string) {
    fmt.Printf("[%s] ", level)
    for _, msg := range messages {
        fmt.Print(msg, " ")
    }
    fmt.Println()
}

func main() {
    logMessage("INFO", "System started", "PID:", "12345")
    logMessage("ERROR", "Disk space is low")
}

http://www.kler.cn/a/516318.html

相关文章:

  • HTML根元素<html>的语言属性lang:<html lang=“en“>
  • centos7执行yum操作时报错Could not retrieve mirrorlist http://mirrorlist.centos.org解决
  • java常量池
  • 后端的config包中的常用配置
  • 为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
  • 使用 `scanpy` 观察 `AnnData` 对象内部数据结构
  • H266/VVC 量化编码中 JCCR 技术
  • JAVA学习-练习试用Java实现“捕获并处理自定义异常”
  • PyQt5之QLCDNumber
  • 大模型从零开始——提示工程 Prompt
  • 智慧金融合集:财税资金数据管理一体化大屏
  • 蓝桥杯不熟知识整理
  • Windows Server 2025如何做系统安全加固
  • chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
  • Linux进度条实现
  • 【Day23 LeetCode】贪心算法题
  • 【LLM】RedisSearch 向量相似性搜索在 SpringBoot 中的实现
  • 【2024年华为OD机试】(A卷,200分)- 优雅子数组 (JavaScriptJava PythonC/C++)
  • Javascript IndexedDB(Dexie.js) React 存储大量(5-50M)的完整示例
  • 规模化指令微调的语言模型
  • 谷歌(Google) Pixel 8/9 Pro(xl)如何获取 root 权限
  • 23. C语言 文件操作详解
  • GS-SLAM论文阅读--SplatMAP
  • SpringBoot使用MockMVC通过http请求controller控制器调用测试
  • leetcode_链表 21.合并两个有序链表
  • Github 2025-01-23 Go开源项目日报 Top10