golang数据的类型识别、获取与判断

栏目: Go · 发布时间: 7年前

### golang数据的类型识别、获取与判断

golang是一种简洁、方便、效率高的语言,很适合C/C++、 Python程序员 使用。

golang是静态语言,但是具有动态语言的特性,这篇文章主要介绍golang的数据类型在运行期的识别、获取和判断方法,让大家可以感受到golang静态语言的动态特性。

#### 1.类型识别

在我们编码中,经常会碰到读取数据时,要判断数据是哪种类型,典型的是json格式文本的读取和识别。在golang中主要用 x.(T)的方式来识别类型:x是变量,而且是不确定类型的变量,interface,如果是已知类型的,比如x是string,那么就会报错:invalid type assertion: data.(string) (non-interface type string on left),当然也不能是常量,常量的类型已知,不需要做类型判断。T是类型字面量,就是类型的名称,举例来说:

var data interface{} = "hello"

strValue, ok := data.(string)

if ok {

fmt.Printf("%s is string type\n", strValue)

}

T的类型并不是任意的,比如有如下json

var f interface{}

b := []byte(`[{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}]`)

json.Unmarshal(b, &f)

data, ok := f.([]interface{})    // 这里不能使用f.([]map[string]interface{}),这样是无法判断成功的

if ok {

fmt.Printf("%+v\n", data)

return

}

所以,x.(T)的方式只能判断一层?这点还没有经过证实,等后面看了源码之后再确定吧

#### 2.类型获取

可以使用反射的方式获取变量的类型

reflect.TypeOf(x)

比如:

var str string = "hello"

fmt.Println(reflect.TypeOf(str))

输出:string

#### 3.类型判断

如果有一系列的数据要识别类型,可以用switch的类型判断语句,分类识别确认。还是以上面json格式的识别判断为例:

var f interface{}

b := []byte(`[{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}]`)

json.Unmarshal(b, &f)

for k, v := range f.(map[string]interface{}) {

switch vv := v.(type) {

case string:

fmt.Println(k, "is string", vv)

case int:

fmt.Println(k, "is int ", vv)

case float64:

fmt.Println(k, "is float64 ", vv)

case []interface{}:

fmt.Println(k, "is array:")

for i, j := range vv {

fmt.Println(i, j)

}

}

}

注意:switch这句,vv := v.(type)只有在switch中才能使用,如果单独使用是会报错的。

通过以上三种方法,基本上可以满足golang中对类型的动态识别、获取和判断操作了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

形式感+:网页视觉设计创意拓展与快速表现

形式感+:网页视觉设计创意拓展与快速表现

晋小彦 / 清华大学出版社 / 2014-1-1 / 59.00元

网页设计师从早年的综合性工作中分化出来,形成了相对独立的专业岗位,网页设计也不再是单纯的软件应用,它衍生出了许多独立的研究方向,当网站策划、交互体验都逐渐独立之后,形式感的突破和表现成为网页视觉设计的一项重要工作。随着时代的发展,网页设计更接近于一门艺术。网络带宽和硬件的发展为网页提供了使用更大图片、动画甚至视频的权利,而这些也为视觉设计师提供了更多表现的空间。另外多终端用户屏幕(主要是各种移动设......一起来看看 《形式感+:网页视觉设计创意拓展与快速表现》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具