美文网首页
go的web参数校验(通用)及变量类型, 变量值与指针的思考

go的web参数校验(通用)及变量类型, 变量值与指针的思考

作者: fllare | 来源:发表于2020-06-12 11:04 被阅读0次

    楼主刚开始学习使用go开发web项目, 在参考https://www.jianshu.com/p/21376f5557d5?from=timeline&isappinstalled=0
    文章的思路后, 发现无法检查子结构体.故进行了修改, 思路:
    1.发现字段是子结构体之后, 递归调用检查函数, 返回的结果err为nil则继续检查, 否则返回错误.
    2.但是, 做了第1步后执行不成功, 因为reflect.valueof函数需要的是一个结构体的地址, 获取到子结构体已经是一个interface的变量了, 取地址的类型为*interface.故做如下修改:定义子结构体时, 类型定义为子结构的地址类型.

    有此引发了思考, 如下测试, 在go中:
    1.变量有变量的类型
    2.变量的值有值的类型.
    3.变量的地址也有类型.如下对interface变量取地址和Car2的变量取地址, 两个地址仍然有自己的类型.

    package main
    
    import "fmt"
    
    type Car1 struct {
        S string
    }
    type Car2 struct {
        A Car1
    }
    
    func main() {
        a := Car2{Car1{"ss"}}
    
        var b interface{}
        b = a
        
        c, _ := b.(Car2)
        fmt.Println(&a, &b, &c)
        fmt.Printf("%p %p", &a, &b)
    }
    
    image.png

    相关文章

      网友评论

          本文标题:go的web参数校验(通用)及变量类型, 变量值与指针的思考

          本文链接:https://www.haomeiwen.com/subject/ipkgtktx.html