package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
func doubler(v interface{}) (string, error) {
|
|
|
|
switch t := v.(type) {
|
|
case string:
|
|
return t + t, nil
|
|
case bool:
|
|
if t {
|
|
return "truetrue", nil
|
|
}
|
|
return "falsefalse", nil
|
|
case float32, float64:
|
|
if f, ok := t.(float64); ok {
|
|
return fmt.Sprint(f * 2), nil
|
|
}
|
|
return fmt.Sprint(t.(float32) * 2), nil
|
|
case int:
|
|
return fmt.Sprint(t * 2), nil
|
|
case int8:
|
|
return fmt.Sprint(t * 2), nil
|
|
case int16:
|
|
return fmt.Sprint(t * 2), nil
|
|
case int32:
|
|
return fmt.Sprint(t * 2), nil
|
|
case int64:
|
|
return fmt.Sprint(t * 2), nil
|
|
case uint:
|
|
return fmt.Sprint(t * 2), nil
|
|
case uint8:
|
|
return fmt.Sprint(t * 2), nil
|
|
case uint16:
|
|
return fmt.Sprint(t * 2), nil
|
|
case uint32:
|
|
return fmt.Sprint(t * 2), nil
|
|
case uint64:
|
|
return fmt.Sprint(t * 2), nil
|
|
default:
|
|
return "", errors.New("unsupported type passed")
|
|
}
|
|
|
|
}
|
|
|
|
func main() {
|
|
|
|
res, _ := doubler(-5)
|
|
fmt.Println("-5: ", res)
|
|
res, _ = doubler(5)
|
|
fmt.Println("5: ", res)
|
|
res, _ = doubler("yum")
|
|
fmt.Println("yum: ", res)
|
|
res, _ = doubler(true)
|
|
fmt.Println("true:", res)
|
|
res, _ = doubler(float32(3.14))
|
|
fmt.Println("3.14:", res)
|
|
|
|
}
|