zoukankan      html  css  js  c++  java
  • Go语言 可变参数(变参函数)

      合适地使用可变参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。

      本文主要从4个实例介绍可变参数用法。

      程序代码:

    package main
    
    import (
        "bytes"
        "fmt"
    )
    
    /****************** 1 ****************
    定义可参变数函数
    形如...type格式的类型只能作为函数的参数类型存在,
    并且必须是最后一个参数,它是一个语法糖(syntactic sugar),
    即这种语法对语言的功能并没有影响,但是更方便程序员使用,
    通常来说,使用语法糖能够增加程序的可读性,从而减少程序出错的可能
    */
    func myfunc(args ...int) {
        for _, v := range args {
            fmt.Println(v)
        }
    }
    
    /****************** 2 ****************
    任意类型的可变参数
    用 interface{} 传递任意类型数据是Go语言的惯例用法,使用 interface{} 仍然是类型安全的
    */
    func MyPrintf(args ...interface{}) {
        for _, arg := range args {
            switch arg.(type) {
            case int:
                fmt.Println(arg, "is an int value.")
            case string:
                fmt.Println(arg, "is an string value.")
            case int64:
                fmt.Println(arg, "is an int64 value.")
            default:
                fmt.Println(arg, "is an unknown value.")
            }
    
        }
    }
    
    /****************** 3 ****************
    遍历可变参数列表——获取每一个参数的值
    */
    func JoinStrings(slist ...string) string {
        //定义 一个字节缓冲,快速连接字符串
        var b bytes.Buffer
        for _, s := range slist {
            //将遍历的字节字符串写入字节数组
            b.WriteString(s)
    
        }
        //将连接好的字节数组转为字符串
        return b.String()
    }
    
    func rawPrint(slst ...interface{}) {
        for _, v := range slst {
            fmt.Println(v)
        }
    }
    
    /****************** 4 ****************
    在多个可变参数函数中传递参数
    如果要将这个含有可变参数的变量传递给下一个可变参数函数,可以在传递时给可变参数变量后面添加...
    */
    func personPrint(slst ...interface{}) {
        rawPrint(slst...)
    }
    
    func main() {
    
        //定义可参变数函数
        myfunc(1, 7, 5)
    
        var v1 int = 1
        var v2 int64 = 234
        var v3 string = "hello"
        var v4 float32 = 1.23
        //任意类型的可变参数
        MyPrintf(v1, v2, v3, v4)
        //遍历可变参数列表——获取每一个参数的值
        fmt.Println(JoinStrings("ladies ", "and ", "gentlemen"))
        //在多个可变参数函数中传递参数
        personPrint(1, 3, 5)
    }

      程序输出:

    1
    7
    5
    1 is an int value.
    234 is an int64 value.
    hello is an string value.
    1.23 is an unknown value.
    ladies and gentlemen
    1
    3
    5
  • 相关阅读:
    十七、springboot配置FastJson为Spring Boot默认JSON解析框架
    十六、springboot整合Spring-data-jpa(二)之通用DAO接口与添加自定义方法
    十五、springboot集成定时任务(Scheduling Tasks)(二)之(线程配置)
    JavaBean的实用工具Lombok(省去get、set等方法)
    十四、springboot全局处理异常(@ControllerAdvice + @ExceptionHandler)
    项目中遇到的问题:Gradle传递性依赖冲突
    hibernate的枚举注解@Enumerated
    Sublime Text 3 注册码失效(被移除)解决方法
    SpringBoot整合dubbo
    Intellij IDEA实现SpringBoot项目多端口启动
  • 原文地址:https://www.cnblogs.com/personblog/p/12319366.html
Copyright © 2011-2022 走看看