golang如何检测变量是否为字符串

网站编辑2023-01-16 16:30:22281

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


  
  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”。

最新推荐

右侧广告图1
  • 安全管家服务

    阿里云安全管家服务是结合阿里云专家累积的云上最佳安全运营实践,为云上用户提供深度安全检测及响应服务,为客户快速构建基础安全运营体系,保障客户云上业务安全

    ¥100000.00/年

    典名专属折扣

  • 云联络中心-数字员工

    通过信令检测技术,查询手机号码的在网状态,准确、可靠

    ¥699.00/月

    年中优惠

  • 短信套餐包

    通过调用API或使用控制台群发助手,即可发送带变量的验证码、通知和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200+国家和地区,安全稳定。

    ¥40.00/年

    8折

右侧广告图2