• 技术文章 >后端开发 >Golang

    golang怎么检测变量是否为字符串

    青灯夜游青灯夜游2023-01-06 12:41:10原创100

    检测变量是否为字符串的方法:1、利用“%T”格式化标识,语法“fmt.Printf("variable count=%v is of type %T \n", count, count)”;2、利用reflect.TypeOf(),语法“reflect.TypeOf(变量)”;3、利用reflect.ValueOf().Kind()检测;4、使用类型断言,可以对类型进行分组。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    golang检测变量是否为字符串,就是检查变量的类型,下面介绍几种方法。

    Go提供几种方法检查变量的类型,在字符串格式化标识%T, 反射方式:reflect.TypeOf, reflect.ValueOf.Kind,另外还有使用类型断言,switch case方式。下面通过实例分别介绍这四类方法。

    %T 格式化标识

    使用%T字符串格式化标识是最简单的检查类型方式。%T是fmt包,可以使用fmt.Printf显示变量类型:

    import (
    	"fmt"
    )
    
    func main() {
    
    	var count int = 42
    	var message string = "go find type"
    	var isCheck bool = true
    	var amount float32 = 10.2
    
    	fmt.Printf("variable count=%v is of type %T \n", count, count)
    	fmt.Printf("variable message='%v' is of type %T \n", message, message)
    	fmt.Printf("variable isCheck='%v' is of type %T \n", isCheck, isCheck)
    	fmt.Printf("variable amount=%v is of type %T \n", amount, amount)
    }
    
    //OutPut
    
    variable count=42 is of type int
    variable message='go find type' is of type string
    variable isCheck='true' is of type bool
    variable amount=10.2 is of type float32

    使用reflect包函数

    如果上述方法没有用,或希望获得类型的更多信息,可以使用reflect包的TypeOf和ValueOf().Kind函数。

    reflect.TypeOf()

    如果给TypeOf方法传入变量值,则会返回变量类型。当然也可以传递变量,但也支持直接传递变量值,而不是变量,代码如下:

    fmt.Printf("%v", reflect.TypeOf(10))
    //int
    fmt.Printf("%v", reflect.TypeOf("Go Language"))
    //string

    下面是不同的变量类型的完整示例:

    package main
    
    import (
    	"fmt"
    	"reflect"
    )
    
    func main() {
    
    	var days int = 42
    	var typemessage string = "go find type"
    	var isFound bool = false
    	var objectValue float32 = 10.2
    
    	fmt.Printf("variable days=%v is of type %v \n", days, reflect.TypeOf(days))
    	fmt.Printf("variable typemessage='%v' is of type %v \n", typemessage, reflect.TypeOf(typemessage))
    	fmt.Printf("variable isFound='%v' is of type %v \n", isFound, reflect.TypeOf(isFound))
    	fmt.Printf("variable objectValue=%v is of type %v \n", objectValue, reflect.TypeOf(objectValue))
    }
    
    //OUTPUT 
    
    variable days=42 is of type int
    variable typemessage='go find type' is of type string
    variable isCheck='false' is of type bool
    variable amount=10.2 is of type float32
    variable acounts=Savings is of type string

    reflect.ValueOf().Kind()

    同样使用ValueOf().Kind()也可以获得变量的类型。 reflect.ValueOf()返回基于传入的变量初始化新值,然后进一步通过Kind方法获得变量类型:

    package main
    
    import (
    	"fmt"
    	"reflect"
    )
    
    func main() {
    
    	var days int = 42
    	var typemessage string = "go find type"
    	var isFound bool = false
    	var objectValue float32 = 10.2
    
    	fmt.Printf("variable days=%v is of type %v \n", days, reflect.ValueOf(days).Kind())
    	fmt.Printf("variable typemessage='%v' is of type %v \n", typemessage, reflect.ValueOf(typemessage).Kind())
    	fmt.Printf("variable isFound='%v' is of type %v \n", isFound, reflect.ValueOf(isFound).Kind())
    	fmt.Printf("variable objectValue=%v is of type %v \n", objectValue, reflect.ValueOf(objectValue).Kind())
    }
    
    //OUTPUT 
    
    variable days=42 is of type int
    variable typemessage='go find type' is of type string
    variable isCheck='false' is of type bool
    variable objectValue=10.2 is of type float32

    这种方法的缺点是需要生成新的变量,这可能会增加内存占用。

    使用类型断言

    本节介绍另一种方法是类型断言。下面写一个方法typeofObject进行类型判断:

    func typeofObject(variable interface{}) string {
    	switch variable.(type) {
    	case int:
    		return "int"
    	case float32:
    		return "float32"
    	case bool:
    		return "boolean"
    	case string:
    		return "string"
    	default:
    		return "unknown"
    	}
    }
    
    fmt.Println("Using type assertions")
    fmt.Println(typeofObject(count))
    fmt.Println(typeofObject(message))
    fmt.Println(typeofObject(isCheck))
    fmt.Println(typeofObject(amount))
    
    //OUTPUT
    Using type assertions
    int
    string
    boolean
    float64

    这种方法的优点是可以对类型进行分组,例如,我们可以将所有int32、int64、uint32、uint64类型标识为“int”。

    【相关推荐:Go视频教程编程教学

    以上就是golang怎么检测变量是否为字符串的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:字符串 go语言 Golang
    上一篇:golang中除法运算符有哪些 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言能开发服务器端吗• go语言是易语言吗• golang怎么修改切片的值• go语言是机器语言吗• golang是免费的吗• go语言可以写数据库么• 单线程是go语言的特性吗
    1/1

    PHP中文网