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


  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、使用类型断言可以对类型进行分组。


  
  变量是否为字符串就是检查变量的类型下面介绍几种方法。
  
  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”。

上一篇:html5中video视频只有声音没有图像如何解决

下一篇:JavaScript中引起内存泄漏的原因是什么


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器