2010-05-09 2 views
4

Так как я подобную функцию для 2-х различных типов данных:Generic функции с использованием интерфейса

func GetStatus(value uint8) (string) {...} 
func GetStatus(name string) (string) {...} 

Я хотел бы использовать способ более простой, как:

func GetStatus(value interface{}) (string) {...} 

можно создать общая функция с использованием интерфейса? Тип данных может быть проверен с использованием reflect.Typeof(value)

ответ

2

Требуется ли сложность и накладные расходы для reflect? Считаете ли вы простым заявление switchtype switch?

package main 

import (
    "fmt" 
) 

func GetStatus(value interface{}) string { 
    var s string 
    switch v := value.(type) { 
    case uint8: 
     v %= 85 
     s = string(v + (' ' + 1)) 
    case string: 
     s = v 
    default: 
     s = "error" 
    } 
    return s 
} 

func main() { 
    fmt.Println(GetStatus(uint8(2)), GetStatus("string"), GetStatus(float(42.0))) 
} 
+0

Есть ли способ масштабировать его для большего количества типов? Или мне нужно писать «случай» для каждого типа, который мне нужен? что-то вроде 'originalValue: = value. (Reflect.TypeOf (value))' возможно? –

Смежные вопросы