Golang 如何定义一个接口类型的切片,它可以用来存储混合类型的
package main
import ( "errors" "fmt" ) func main() { //定义一个接口类型的切片,可以用来存储混合类型的数据 in := make([]interface{},0) in = append(in,2,"Go",8,"language",'a',false,"A",3.14) var x1 int = in[0].(int) var x2 string = in[1].(string) var x3 int = in[2].(int) var x4 string = in[3].(string) var x5 int32 = in[4].(int32) //注意它是int32类型而不是uint8类型 var x6 bool = in[5].(bool) var x7 string = in[6].(string) var x8 float64 = in[7].(float64) fmt.Println(" x1 = ",x1) fmt.Println(" x2 = ",x2) fmt.Println(" x3 = ",x3) fmt.Println(" x4 = ",x4) fmt.Println(" x5 = ",x5) fmt.Println(" x6 = ",x6) fmt.Println(" x7 = ",x7) fmt.Println(" x8 = ",x8) fmt.Println("in = ",in) fmt.Println("===================================================================================") data,err := concat(in...) if err == nil { fmt.Println("混合类型拼接字符串:",data) } else { fmt.Println("混合类型拼接字符串:",data) } } //变参函数concat有着不定数量和不确定类型的参数,把混合类型的多个值拼接成一个字符串 func concat(args ...interface{}) (ret string,err error) { for _,arg := range args { switch v := arg.(type) { case int: ret = ret + fmt.Sprintf("%v",v) case int32: ret = ret + fmt.Sprintf("%v",v) case int64: ret = ret + fmt.Sprintf("%v",v) case bool: ret = ret + fmt.Sprintf("%v",v) case string: ret = ret + fmt.Sprintf("%v",v) case float32: ret = ret + fmt.Sprintf("%v",v) case float64: ret = ret + fmt.Sprintf("%v",v) default: err = errors.New(fmt.Sprintf("%v",v) + " data type has been not yet supported") // 自定义错误信息输出return ret,err } } return ret,nil } 调试控制台输出以下信息: 2017/06/30 17:00:45 server.go:73: Using API v1 混合类型拼接字符串: 2Go8language97falseA3.14
另外一个范例: package main //传入多个参数值直接调用变参函数,第2次传入10个参数值 sum2 := sum(1,7,9,10) 调试控制台输出以下信息: API server listening at: 127.0.0.1:2345
字符串的多种拼接方式范例: package main //方法四:字符串混合值类型的拼接,直接使用NewBufferString创建缓存,直接使用另外一个NewBuffer创建缓存 str6 := "Falling" byte11 := []byte(" in ") //字符串转uint8类型的数组 byte12 := []byte{'L','o','v','e'} //uint8类的切片初始化 buf1 := bytes.NewBufferString(str6) buf2 := bytes.NewBuffer(byte11) buf3 := bytes.NewBuffer(byte12) fmt.Println("字符串拼接结果:",buf1.String()+buf2.String()+buf3.String()) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |