2017-02-15 17 views
-2

У меня есть следующие функции:Указатель на срез интерфейсов в параметре функции

func read(filePath string, structure *[]interface) { 
    raw, err := ioutil.ReadFile(filePath) 
    if err != nil { 
     fmt.Println(err.Error()) 
     os.Exit(1) 
    } 
    json.Unmarshal(raw, structure) 
} 

который я называю так:

indexes := []Index 
    read(path + "/" + element + ".json", &indexes) 

Однако я получаю странные ошибки, которые исчезают, когда я беру от structure *[]interface из функции декларации:

./index.verb.go:73: syntax error: unexpected), expecting { 

Я думаю, что что-то wront, когда я пытаюсь пройти точку er на кусочек общего типа. Как мне это сделать? Я не могу сделать structure *[]Index, потому что есть другие типы я хочу вернуться слишком

+0

, если вы запустите 'идти fmt' он расскажет вам точное местоположение вашей синтаксической ошибки, и в этом случае даже то, что характер, как ожидается. – JimB

+0

@JimB спасибо! –

ответ

1

Объявить функцию как это:

func read(filePath string, structure interface{}) error { 
    raw, err := ioutil.ReadFile(filePath) 
    if err != nil { 
    return err 
    } 
    return json.Unmarshal(raw, structure) 
} 

Значение structure передается через json.Unmarshal и может быть любого типа поддерживается json.Unmarshal.

Зов это следующим образом:

var indexes []Index 
err := read(path + "/" + element + ".json", &indexes) 
if err != nil { 
    fmt.Println(err.Error()) 
    os.Exit(1) 
}