Конвертировать []interfece в []float64

174 views
Skip to first unread message

forwo...@gmail.com

unread,
Nov 3, 2016, 8:12:08 AM11/3/16
to Golang Russian
Пробую использовать библиотеку github.com/olebedev/config. С помощью нее разбираю вот такой файл json

{
"length": 1000,
"alphabet": ["a, b, c"],
"probability": [[0.1, 0.4, 0.5], [0.3, 0.4, 0.3], [0.2, 0.2, 0.6]]
}

Вот таким кодом считываю probability, но сконвертировать []interfece в []float64 не получается, помогите пожалуйста.

probability, _ := conf.List("probability")

for _, i := range probability{
fmt.Println([]float64(i))
}

ma...@kevac.org

unread,
Nov 3, 2016, 8:22:11 AM11/3/16
to Golang Russian
Нельзя конвертировать []interface в []float64 таким способом. У них разное представление в памяти. Нужно делать вручную.

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

forwo...@gmail.com

unread,
Nov 3, 2016, 8:51:43 AM11/3/16
to Golang Russian
В примере, который вы скинули происходит преобразование slice to interface, а мне нужно interface to slice. Как мне извлечь все значения из []interface?

ma...@kevac.org

unread,
Nov 3, 2016, 8:59:27 AM11/3/16
to Golang Russian
Что-то я не нашел кнопку "расшарить" на go-шной песочнице.
Кину сюда.

package main

import (
"fmt"
)

func main() {
var (
listOfInterfaces []interface{}
listOfIntegers   []int64
)

for i := int64(0); i < 50; i++ {
listOfInterfaces = append(listOfInterfaces, i)
}

for i := 0; i < len(listOfInterfaces); i++ {
listOfIntegers = append(listOfIntegers, listOfInterfaces[i].(int64))
}

fmt.Println(listOfIntegers)
}

On Thu, Nov 3, 2016 at 3:51 PM <forwo...@gmail.com> wrote:
В примере, который вы скинули происходит преобразование slice to interface, а мне нужно interface to slice. Как мне извлечь все значения из []interface?

--

forwo...@gmail.com

unread,
Nov 3, 2016, 9:07:50 AM11/3/16
to Golang Russian
У меня возникает ошибка

invalid operation: i[0] (type interface {} does not support indexing)

ma...@kevac.org

unread,
Nov 3, 2016, 9:33:01 AM11/3/16
to Golang Russian
Значит i - не массив/слайс, а interface{}.
Без кода что-либо сказать не могу. Вы даете очень мало информации.

On Thu, Nov 3, 2016 at 4:07 PM <forwo...@gmail.com> wrote:
У меня возникает ошибка

invalid operation: i[0] (type interface {} does not support indexing)

--

forwo...@gmail.com

unread,
Nov 3, 2016, 9:46:03 AM11/3/16
to Golang Russian
Вот код

package main

import (
"github.com/olebedev/config"
"fmt"
)

func main() {
conf, err := config.ParseJsonFile("./config.json")
if err != nil {
panic(fmt.Sprintln("Конфигурационный файл не найден"))

}
probability, _ := conf.List("probability")

for _, i := range probability{
      fmt.Println(i[0].(float64))
}
}

Содержимое файла config.json

ma...@kevac.org

unread,
Nov 3, 2016, 10:28:46 AM11/3/16
to Golang Russian
conf.List() судя по всему возвращает слайс (список) интерфейсов.
Вы проходите по нему и соответственно i - это уже конкретный интерфейс.
Соответственно [0] там не нужен.

--

Ilya Ozherelyev

unread,
Nov 3, 2016, 10:58:59 AM11/3/16
to Golang Russian
Что то модуль какой то не очень, непродуман этот кейс совсем.

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

https://play.golang.org/p/LHOpFd9SZh

четверг, 3 ноября 2016 г., 17:28:46 UTC+3 пользователь Marko Kevac написал:

forwo...@gmail.com

unread,
Nov 3, 2016, 11:31:01 AM11/3/16
to Golang Russian
А есть какой нибудь более удобный в использовании модуль?

Hoots The Owl

unread,
Nov 3, 2016, 11:51:19 AM11/3/16
to Golang Russian
Если у вас такие интересные кейссы в конфиге, я бы смотрел в сторону строго структуризированных конфигов в духе https://github.com/ian-kent/gofigure, где в структуре можно явно описать то, что вы в итоге хотите получить

чт, 3 нояб. 2016 г. в 18:31, <forwo...@gmail.com>:
А есть какой нибудь более удобный в использовании модуль?

--
Вы получили это сообщение, поскольку подписаны на одну из тем в группе "Golang Russian".
Чтобы отменить подписку на эту тему, перейдите по ссылке https://groups.google.com/d/topic/golang-ru/mD3s2uohzHE/unsubscribe.
Чтобы отменить подписку на эту группу и все ее темы, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages