mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-02-02 16:28:39 +08:00
feat: support bool for env tag (#2593)
This commit is contained in:
parent
69068cdaf0
commit
b562e940e7
@ -6,6 +6,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@ -342,6 +343,14 @@ func (u *Unmarshaler) processFieldWithEnvValue(field reflect.StructField, value
|
||||
envVal string, opts *fieldOptionsWithContext, fullName string) error {
|
||||
fieldKind := field.Type.Kind()
|
||||
switch fieldKind {
|
||||
case reflect.Bool:
|
||||
val, err := strconv.ParseBool(envVal)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unmarshal field %q with environment variable, %w", fullName, err)
|
||||
}
|
||||
|
||||
value.SetBool(val)
|
||||
return nil
|
||||
case durationType.Kind():
|
||||
if err := fillDurationValue(fieldKind, value, envVal); err != nil {
|
||||
return fmt.Errorf("unmarshal field %q with environment variable, %w", fullName, err)
|
||||
|
@ -3186,6 +3186,47 @@ func TestUnmarshal_EnvFloatOverwrite(t *testing.T) {
|
||||
assert.Equal(t, float32(123.45), v.Age)
|
||||
}
|
||||
|
||||
func TestUnmarshal_EnvBoolTrue(t *testing.T) {
|
||||
type Value struct {
|
||||
Enable bool `key:"enable,env=TEST_NAME_BOOL_TRUE"`
|
||||
}
|
||||
|
||||
const envName = "TEST_NAME_BOOL_TRUE"
|
||||
os.Setenv(envName, "true")
|
||||
defer os.Unsetenv(envName)
|
||||
|
||||
var v Value
|
||||
assert.NoError(t, UnmarshalKey(emptyMap, &v))
|
||||
assert.True(t, v.Enable)
|
||||
}
|
||||
|
||||
func TestUnmarshal_EnvBoolFalse(t *testing.T) {
|
||||
type Value struct {
|
||||
Enable bool `key:"enable,env=TEST_NAME_BOOL_FALSE"`
|
||||
}
|
||||
|
||||
const envName = "TEST_NAME_BOOL_FALSE"
|
||||
os.Setenv(envName, "false")
|
||||
defer os.Unsetenv(envName)
|
||||
|
||||
var v Value
|
||||
assert.NoError(t, UnmarshalKey(emptyMap, &v))
|
||||
assert.False(t, v.Enable)
|
||||
}
|
||||
|
||||
func TestUnmarshal_EnvBoolBad(t *testing.T) {
|
||||
type Value struct {
|
||||
Enable bool `key:"enable,env=TEST_NAME_BOOL_BAD"`
|
||||
}
|
||||
|
||||
const envName = "TEST_NAME_BOOL_BAD"
|
||||
os.Setenv(envName, "bad")
|
||||
defer os.Unsetenv(envName)
|
||||
|
||||
var v Value
|
||||
assert.Error(t, UnmarshalKey(emptyMap, &v))
|
||||
}
|
||||
|
||||
func TestUnmarshal_EnvDuration(t *testing.T) {
|
||||
type Value struct {
|
||||
Duration time.Duration `key:"duration,env=TEST_NAME_DURATION"`
|
||||
|
Loading…
Reference in New Issue
Block a user