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

楼主刚开始学习使用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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容