看代码:
package main
import "fmt"
func main() {
Any(1)
Any("333")
Any(false)
}
func Any(v interface{}) {
fmt.Println("good", v)
if v1, ok1 := v.(string);ok1{
fmt.Println("string", v1)
}else if v2, ok2 := v.(int); ok2{
fmt.Println("int", v2)
}else{
fmt.Println("heheda")
}
}
结果:
good 1
int 1
good 333
string 333
good false
heheda
再来看下:
package main
import (
"log"
"encoding/json"
)
type A struct{
X int
Y int
}
type B struct{
X int
Y string
}
func trans(data interface{}, js string) error {
return json.Unmarshal([]byte(js), data)
}
func main(){
var a A
err := trans(&a, `{"X":1,"Y":2}`)
log.Print(err, a)
var b B
err = trans(&b, `{"X":1,"Y":"3"}`)
log.Print(err, b)
}
结果:
2019/02/24 16:22:52 <nil> {1 2}
2019/02/24 16:22:52 <nil> {1 3}
不多说。