What are you trying to do?

The behaviour of LimRange as you have it here is to return the float64
value of x if it is a float64, zero if it is another numerical type in
the case list and NaN if it is none of those.

I would suggest you read https://golang.org/ref/spec#Switch_statements 
particularly Type Switches where it says

```
In clauses with a case listing exactly one type, the variable has that
type; *otherwise, the variable has the type of the expression in the
TypeSwitchGuard*.
```

This means that in the case as you have it below with
`case int,int8,int16,int32,float32,float64:` the type of v must be the
type of x, which is interface{}. You cannot convert interface{} to
float64.

On Wed, 2017-01-11 at 18:35 -0800, hui zhang wrote:
> This is a compile error,   so I don't think this matter
> I modify the code ,   add float ,  it is the same.
> 
> func LimRange(x, low, high interface{}) float64 {
>    var fx, flow, fhigh float64
>    switch v := x.(type) {
>    case int:                   //OK
>    case int8:
>    case int16:
>    case int32:
>    case float32:
>    case float64:
>       return float64(v)       //OK
> 
>    default:
>       return math.NaN()
>    }
> 
>    switch v := x.(type) {
>    case int,int8,int16,int32,float32,float64:
>       return float64(v)       //Error: cannot convert v (type
> interface {}) to type float64: need type assertion
>    default:
>       return math.NaN()
>    }
> 
>     a :=1
>    switch a {
>    case 1,2:                    //OK
>       println("1,2")
>    }
> 
>    return math.Max(math.Min(fx, fhigh), flow)
> }
> 
> 

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to