美文网首页
golang数据的类型识别、获取与判断

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

作者: 古月晨风 | 来源:发表于2018-12-13 11:38 被阅读0次

### 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中对类型的动态识别、获取和判断操作了。

相关文章

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

    ### golang数据的类型识别、获取与判断 golang是一种简洁、方便、效率高的语言,很适合C/C++、Py...

  • Golang判断数据类型和获取数据类型

    使用.(type)及reflect.TypeOf()

  • 关于Golang的那些事(三) -- 基本数据类型

    说完了变量与声明,接下来要讲讲Golang里面的数据类型,Golang里面的数据类型分成基础类型、聚合类型...

  • Golang学习之基本数据类型

    如上图所示,Golang中的数据类型分为基本数据类型与复杂数据类型(派生数据类型),这一章重点介绍Golang中的...

  • id is ==

    id() 获取当前对象或基础类型的数据的地址 a is b 判断a与b的地址是否相同 a == b 判断a与b的值...

  • 关于js类型判断

    instanceof / typeof 类型判断 typeof 可以识别null以外的基础数据类型,如number...

  • 有关typeof运算符

    识别所有的值类型 识别函数 判断是否是引用类型(不可再细分) 能够判断函数 能识别饮用类型(不能再继续识别)

  • php 数据类型和数据类型转化

    一、数据类型 基础数据类型 复合数据类型 特殊数据类型 二、获取数据类型 三、打印数据类型和值 四、数据类型判断 ...

  • JS

    变量类型 1、typeof能判断哪些类型?作用:识别所有的值类型,能识别函数,能判断是否引用类型--typeof ...

  • golang巧用fmt判断相等

    golang的==只能用于基本数据类型, 要想判断切片或者结构体, 很多人会用长串的and进行判断, 但是这样不仅...

网友评论

      本文标题:golang数据的类型识别、获取与判断

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