当前位置:   article > 正文

golang给变量设置默认值_go getint

go getint

不知你是否已经受够了大量判断变量是零或者空指针时给变量赋值的逻辑, 比如下述代码:

package main

func t1(page, size int) {
    if page == 0 {
        page = 1
    }
    if size == 0 {
        size = 10
    }
    //other
}

func main() {
	var a int
    t1(a)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

为了解决上述问题封装了下述函数可以解决各种空值判断

package set

import "reflect"

func Default(field, _default interface{}) {
	v1 := reflect.ValueOf(field).Elem()
	v2 := reflect.ValueOf(_default)
	if v1.IsZero() {
		v1.Set(v2)
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后文章开头的示例就可以改为

package main

func t1(page, size int) {
    set.Default(&page, 1)
    set.Default(&size, 10)
    //other
}

func main() {
	var a int
    t1(a)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

另外还支持其它一些空值的设置, 如下:

package main

import (
	"fmt"
	"github.com/goperate/convert/core/set"
)

type Test struct {
	A int
}

func main() {
	var a string
	set.Default(&a, "10")
	fmt.Println(a)

	var b int
	set.Default(&b, 10)
	fmt.Println(b)

	var c float32 = 1.28
	set.Default(&c, float32(2))
	fmt.Println(c)

	var d Test
	set.Default(&d, Test{A: 10})
	fmt.Println(d)

	//空指针必须传入指针的指针, 否则程序报错
	var e *Test
	set.Default(&e, &Test{A: 111})
	fmt.Println(e)

	var f []int
	set.Default(&f, []int{2222})
	fmt.Println(f)

	//长度为0的数组不会被覆盖
	g := make([]int, 0, 0)
	set.Default(&g, []int{2})
	fmt.Println(g)

	var h map[string]int
	set.Default(&h, map[string]int{"a": 666})
	fmt.Println(h)

	//初始化完成的空map不会被覆盖
	i := make(map[string]int)
	set.Default(&i, map[string]int{"a": 777})
	fmt.Println(i)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
10
10
1.28
{10}
&{111}
[2222]
[]
map[a:666]
map[]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号