美文网首页
【Go - 函数 参数缺省/默认值】

【Go - 函数 参数缺省/默认值】

作者: wn777 | 来源:发表于2024-09-05 20:02 被阅读0次

    Go现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的简单,而增加这种额外的支持会使parser变得更复杂。

    但是如果仍然需要,这里也有一些实现途径,

    使用可变参数语法糖

    package main
    
    import "fmt"
    
    // a is required, b is optional.
    // Only the first value in b_optional will be used.
    func Concat(a string, b_optional ...int) string {
        b := 0
        if len(b_optional) > 0 {
            b = b_optional[0]
        }
    
        return fmt.Sprintf("%s%d", a, b)
    }
    
    func main() {
    
        fmt.Println(Concat("Hello"))
        fmt.Println(Concat("Hello", 1))
        
    }
    
    

    这种算是比较常见的一种, 利用变长参数

    b_optional 本质是个变长参数,对应一个切片,切片长度可能为0,也可能包含1个或者多个值。

    利用结构体

    package main
    
    import (
        "fmt"
    )
    
    type Parameters struct {
        A string
        B string
    }
    
    func Concat(prm Parameters) string {
        // 变相给A 设置默认值
        if prm.A == "" {
            prm.A = "Hello"
        }
    
        return prm.A + ", " + prm.B
    }
    func main() {
    
        // fmt.Println(Concat("Hello"))
        p := Parameters{A: "Hello", B: "World"}
        fmt.Println(Concat(p))
    
        p1 := Parameters{A: "Hello"}
        fmt.Println(Concat(p1))
    
        p2 := Parameters{B: "World"}
        fmt.Println(Concat(p2))
    
        p3 := Parameters{}
        fmt.Println(Concat(p3))
    }
    
    

    利用结构体不强校验每个字段必须要存在,在函数开始时检查添加默认值

    小结

    整体上Go不太建议 默认或者缺省值,但是也有一定的方法来实现。

    相关文章

      网友评论

          本文标题:【Go - 函数 参数缺省/默认值】

          本文链接:https://www.haomeiwen.com/subject/chldljtx.html