当前位置:   article > 正文

golang给函数参数设置默认值的几种方式(函数参数默认值)_go函数参数默认值

go函数参数默认值

这个问题相当麻烦,根据golang-nuts/google groups中的这篇文章,golang现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的简单,而增加这种额外的支持会使parser变得更复杂。

设置参数值的好处:

  1. 可以缺省部分参数。
  2. 可以提供一种默认的,行之有效的配置。

但是参考资料中提到了几种实现默认值的方法:

强制改变

  1. // Both parameters are optional, use empty string for default value
  2. func Concat1(a string, b int) string {
  3. if a == "" {
  4. a = "default-a"
  5. }
  6. if b == 0 {
  7. b = 5
  8. }
  9. return fmt.Sprintf("%s%d", a, b)
  10. }

go的一大特点就是所有的变量都必须经过初始化。那如果在函数内部读取到参数值为初始化值,即可进行对应的操作。 但是这种方法无法解决设置参数默认值时所经常应对的场景,即参数缺省问题。

使用可变参数语法糖

  1. // a is required, b is optional.
  2. // Only the first value in b_optional will be used.
  3. func Concat2(a string, b_optional ...int) string {
  4. b := 5
  5. if len(b_optional) > 0 {
  6. b = b_optional[0]
  7. }
  8. return fmt.Sprintf("%s%d", a, b)
  9. }

上述方法中,a是必须的,而b是可选的。 此时b的默认值时5,如果b_optional中存在数据,则将其读取。

利用结构体的config

  1. // A declarative default value syntax
  2. // Empty values will be replaced with defaults
  3. type Parameters struct {
  4. A string `default:"default-a"` // this only works with strings
  5. B string // default is 5
  6. }
  7. func Concat3(prm Parameters) string {
  8. typ := reflect.TypeOf(prm)
  9. if prm.A == "" {
  10. f, _ := typ.FieldByName("A")
  11. prm.A = f.Tag.Get("default")
  12. }
  13. if prm.B == 0 {
  14. prm.B = 5
  15. }
  16. return fmt.Sprintf("%s%d", prm.A, prm.B)
  17. }

虽然也能做到缺省参数(如果不设置A属性,则该属性将被默认初始化),但是这种方式只对字符串管用。

转换函数的全部参数

  1. func Concat4(args ...interface{}) string {
  2. a := "default-a"
  3. b := 5
  4. for _, arg := range args {
  5. switch t := arg.(type) {
  6. case string:
  7. a = t
  8. case int:
  9. b = t
  10. default:
  11. panic("Unknown argument")
  12. }
  13. }
  14. return fmt.Sprintf("%s%d", a, b)
  15. }

相当泛用的方法,但是对于不同的类型就不可行了。


golang中函数如何设置参数默认值 - 腾讯云开发者社区-腾讯云这个问题相当麻烦,根据golang-nuts/google groups中的这篇文章,golang现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的...icon-default.png?t=M666https://cloud.tencent.com/developer/article/2025794

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/680909
推荐阅读
相关标签
  

闽ICP备14008679号