2015-03-21 4 views
0

В рубина я создал массив заполнен типов:Как построить смешанный массив

[1, 'hello', :world] # [Fixnum, String, Symbol] 
=> [1, "hello", :here] 

Как реализовать подобный массив заполняется со смешанными типами в Go?

Как объявить массив?

+1

Вопрос о том, как писать язык X на языке Y, является неправильным подходом к различным языкам. Узнайте, как решить проблему на идиоматическом языке Y способами и играть на силе языка Y, а не придерживаться любого языка X. Почему вам нужен массив разных типов? Что ты пытаешься сделать?? В зависимости от того, что может быть много разных ответов Go (например, создать интерфейс, который описывает общий бит, и сохранить ломтик * из них (срезы и массивы разные). –

+2

И, прочитав свой комментарий к ответу, я был прав. вообще не создавайте массив разных типов, вы хотите совершенно другую конструкцию Go: несколько возвратов и/или структуру. Моя рекомендация: Остановитесь. Прочитайте [Go spec] (https://golang.org/ref/spec). Пройдите [Go tour] (https://tour.golang.org). Прочитайте [Эффективный переход] (https://golang.org/doc/effective_go.html). Продолжайте. –

ответ

3

Вы можете сделать это через пустой интерфейс - interface{}:

arr := make([]interface{}, 0) 

arr = append(arr, "asdfs") 
arr = append(arr, 5) 

или в буквальном виде:

arr := []interface{}{"asdfs", 5} 

Всякий раз, когда вы хотите использовать значение этого массива необходимо использовать тип утверждение.

+0

есть только один способ (с помощью 'Interface'), чтобы реализовать его? – itsnikolay

+0

@itsnikolay Да, Go статически типизирован Почему вам нужен такой смешанный список? – inf

+0

Я хотел бы вернуть массив' [year, month, day] 'для результата' time .Now(). Date() ' – itsnikolay

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