mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-16 21:32:11 +08:00
```go package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { var i int var err error err = c.DefaultQueryVar("int", &i, -1) fmt.Printf("%v, %v\n", i, err) var ss []string err = c.DefaultQueryVar("slice", &ss, []string{"5", "5", "5"}) fmt.Printf("%v, %v\n", ss, err) var b bool err = c.DefaultQueryVar("bool", &b, false) fmt.Printf("%v, %v\n", b, err) var f float64 err = c.DefaultQueryVar("f", &f, 3.14) fmt.Printf("%v, %v\n", f, err) }) r.Run() return } ```
73 lines
2.3 KiB
Go
73 lines
2.3 KiB
Go
package binding
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type typeTest struct {
|
|
needParse []string
|
|
ptr interface{}
|
|
want interface{}
|
|
}
|
|
|
|
func TestParseTypeVar(t *testing.T) {
|
|
var (
|
|
b bool
|
|
i int
|
|
i8 int8
|
|
i16 int16
|
|
i32 int32
|
|
i64 int64
|
|
u uint
|
|
u8 uint8
|
|
u16 uint16
|
|
u32 uint32
|
|
u64 uint64
|
|
s string
|
|
f32 float32
|
|
f64 float64
|
|
duration time.Duration
|
|
stringSlice []string
|
|
intSlice []int
|
|
float32Slice []float32
|
|
stringArray [3]string
|
|
tm time.Time
|
|
)
|
|
|
|
tv := []typeTest{
|
|
{needParse: []string{"1"}, ptr: &i, want: 1},
|
|
{needParse: []string{"2"}, ptr: &i8, want: int8(2)},
|
|
{needParse: []string{"3"}, ptr: &i16, want: int16(3)},
|
|
{needParse: []string{"4"}, ptr: &i32, want: int32(4)},
|
|
{needParse: []string{"5"}, ptr: &i64, want: int64(5)},
|
|
{needParse: []string{"6"}, ptr: &u, want: uint(6)},
|
|
{needParse: []string{"7"}, ptr: &u8, want: uint8(7)},
|
|
{needParse: []string{"8"}, ptr: &u16, want: uint16(8)},
|
|
{needParse: []string{"9"}, ptr: &u32, want: uint32(9)},
|
|
{needParse: []string{"10"}, ptr: &u64, want: uint64(10)},
|
|
{needParse: []string{"test"}, ptr: &s, want: "test"},
|
|
{needParse: []string{"1.1"}, ptr: &f32, want: float32(1.1)},
|
|
{needParse: []string{"2.2"}, ptr: &f64, want: float64(2.2)},
|
|
{needParse: []string{"1", "2", "3"}, ptr: &stringSlice, want: []string{"1", "2", "3"}},
|
|
{needParse: []string{"1", "2", "3"}, ptr: &intSlice, want: []int{1, 2, 3}},
|
|
{needParse: []string{"4.1", "5.1", "6.1"}, ptr: &float32Slice, want: []float32{4.1, 5.1, 6.1}},
|
|
{needParse: []string{"a1", "a2", "a3"}, ptr: &stringArray, want: [3]string{"a1", "a2", "a3"}},
|
|
{needParse: []string{"true"}, ptr: &b, want: true},
|
|
{needParse: []string{"1s"}, ptr: &duration, want: time.Second},
|
|
{needParse: []string{"2006-01-02T15:04:05Z"}, ptr: &tm, want: time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)},
|
|
}
|
|
|
|
for k := range tv {
|
|
if err := parseTypeVar(reflect.ValueOf(tv[k].ptr), tv[k].needParse); err != nil {
|
|
t.Errorf("parseBaseTypeVar %T fail:%s\n", tv[k].want, err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(reflect.ValueOf(tv[k].ptr).Elem().Interface(), tv[k].want) {
|
|
t.Errorf("parseBaseTypeVar %T fail got:%v, want:%v\n", tv[k].ptr, tv[k].ptr, tv[k].want)
|
|
}
|
|
}
|
|
|
|
}
|