内容简介:最近有大量用到reflect,给一流开源项目gin贡献的pr就是这方面的技巧,也在自己的开源项目中使用了大量使用reflect简化接口开发。鉴于reflect的接口特别难用,特别容易忘记,记录下。
最近有大量用到reflect,给一流开源项目gin贡献的pr就是这方面的技巧,也在自己的开源项目中使用了大量使用reflect简化接口开发。鉴于reflect的接口特别难用,特别容易忘记,记录下。
判断类型
// 提取类型信息到变量里
var stringSliceType = reflect.TypeOf([]string{})
var intSliceType = reflect.TypeOf([]int{})
var int32SliceType = reflect.TypeOf([]int32{})
func typeCheck(x interface{}) {
// 提取interface{}里面的类型信息
vt := reflect.ValueOf(x).Type()
switch vt {
case stringSliceType:
fmt.Printf("[]string{}\n")
case intSliceType:
fmt.Printf("[]int{}\n")
case int32SliceType:
fmt.Printf("[]int32{}\n")
default:
fmt.Printf("unkown type\n")
}
}
func main() {
typeCheck([]string{})
typeCheck([]int{})
typeCheck([]int32{})
typeCheck(0)
}
// 输出
// []string{}
// []int{}
// []int32{}
// unkown type
判断指针类型和空指针
func checkPtrAndNil(x interface{}) {
v := reflect.ValueOf(x)
if v.Kind() == reflect.Ptr {
fmt.Printf("%v is pointer\n", v.Type())
if v.IsNil() {
fmt.Printf("%v is is a null pointer\n", v.Type())
return
}
}
fmt.Printf("%v is value\n", v.Type())
}
func main() {
var ip *int
var sp *string
var i32p *int32
checkPtrAndNil(ip)
checkPtrAndNil(sp)
checkPtrAndNil(i32p)
checkPtrAndNil(3)
}
// 输出
// *int is pointer
// *int is is a null pointer
// *string is pointer
// *string is is a null pointer
// *int32 is pointer
// *int32 is is a null pointer
// int is value
以上所述就是小编给大家介绍的《golang reflect笔记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
马云现象的经济学分析:互联网经济的八个关键命题
胡晓鹏 / 上海社会科学院出版社 / 2016-11-1 / CNY 68.00
互联网经济的产生、发展与扩张,在冲击传统经济理论观点的同时,也彰显了自身理论体系的独特内核,并与那种立足于工业经济时代的经典理论发生显著分野。今天看来,“马云”们的成功是中国经济长期“重制造、轻服务,重产能、轻消费,重国有、轻民营”发展逻辑的结果。但互联网经济的发展却不应仅仅止步于商业技巧的翻新,还需要在理论上进行一番审慎的思考。对此,我们不禁要问:互联网经济驱动交易发生的机理是什么?用户基数和诚......一起来看看 《马云现象的经济学分析:互联网经济的八个关键命题》 这本书的介绍吧!