ToBoolE(boolStr)) // 转成bool,有error返回 } 原理介绍 其实cast库的原理很简单,以cast.ToString()为例,就是通过断言获取到参数的类型,通过枚举所有支持的类型,结合strconv标准包、类型转换等方式实现任意类型的参数转换成string。 // ToStringE casts an interface to a string type. func ToStringE(i ...
ToInt()函数用于将非 int类型数据转换为对应的int表示,具体的函数签名如下。 示例代码如下: cast.ToInt(8)// 8cast.ToInt(8.31)// 8cast.ToInt("8")// 8cast.ToInt(true)// 1cast.ToInt(false)// 0vareightinterface{} =8cast.ToInt(eight)// 8cast.ToInt(nil)// 0 __EOF__...
package main import ( "encoding/json" "fmt" "reflect" "strconv" ) // AnyToStr 将任意类型转换为字符串 func AnyToStr(i interface{}) (string, error) { if i == nil { return "", nil } v := reflect.ValueOf(i) if v.Kind() == reflect.Ptr { if v.IsNil() { return "", nil ...
到了第二个ToInt,cast 的优势就更明显了,传统方式下,一个interface{}类型的"123"如果要转换成int,必须先类型断言为string,再使用strconv转换成int,代码就不写了,想象一下就知道有多麻烦,而 cast 可以将这个过程一步到位。 接着是第三个输出cast.ToInt(str),这里的str是一个string类型的"hello, world!",它...
这里实现了一个任意类型数据转string的的方法: // AnyToStr 任意类型数据转stringfuncAnyToStr(iinterface{})(string,error){ifi==nil{return"",nil}v:=reflect.ValueOf(i)ifv.Kind()==reflect.Ptr{ifv.IsNil(){return"",nil}v=v.Elem()}switchv.Kind(){casereflect.String:returnv.String(),nilcaseref...
(string)) default: return false, fmt.Errorf("unable to cast %#v of type %T to bool", i, i) } } // ToIntE, ToInt8E, ToInt16E... 3.泛型 最终,我们可以通过泛型完成对上面多个具体类型转换函数的封装。这样我们只需要调用一个函数,便可完成对所有类型的转换。 代码语言:javascript 代码运行...
cast.ToString(interface{}) string 将接口转换为字符串。 cast.ToStringMap(interface{}) map[string]interface{} 将接口转换为字符串映射。 cast.ToInt(interface{}) int 将接口转换为整数。 cast.ToFloat64(interface{}) float64 将接口转换为浮点数。
fmt.Println(cast.ToInt(str))// 输出:1231230 我们创建了一个interface{}类型的变量target,传统方式下如果要将一个interface{}转化为string,需要使用类型断言: vartargetinterface{} ="123"str := target.(string)// orstr, ok := target.(string) ...
func main() { var x interface{} x = "I'm Garfield" v, ok := x.(string) if ok { fmt.Println(v) } else { fmt.Println("Asserts Failed") } } 上面的示例中如果要多次断言就需要多个if判断,Go语言中中提供了另外一种断言方法switch:变量x断言成了type 类型,type 类型具体值就是 switch ca...
func TestCast(t*testing.T){//1. 转字符串fmt.Println(cast.ToString("helloworld"))//helloworldfmt.Println(cast.ToString(66))//"66"fmt.Println(cast.ToString(3.1415926))//"3.1415926"fmt.Println(cast.ToString([]byte("one time")))//"one time"varretinterface{} ="helloWorld"fmt.Println(cast....