android系统定制开发golang给函数参数设置默认值的几种方式(函数参数默认值)

android系统定制开发这个问题相当麻烦,android系统定制开发根据中的这篇文章,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. }

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


网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发