2017-02-06 4 views
0

Я ищу ответ в Интернете, но это не тот, который соответствует моим потребностям.Преобразование строки в массив целых чисел в golang

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

"[2,15,23]" 

и я пытаюсь преобразовать его в этом формате:

[2,15,23] 

мне нужен тип после конвертации, чтобы изменить [] внутр. Мне нужно преобразовать его, потому что я хочу использовать его позже, чтобы тип интерфейса использовал его в sql-запросе в качестве параметра.

Есть ли способ его преобразования?

Благодаря

+4

Здесь вы можете использовать базовое JSON, не подлежащее маркировке. –

+2

https://golang.org/pkg/encoding/json/#Unmarshal – Firedrake969

ответ

2

Лучший способ с использованием json.Unmarshal:

func main() { 
    str := "[2,15,23]" 
    var ints []int 
    err := json.Unmarshal([]byte(str), &ints) 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%v", ints) 
} 
0

Вот рабочий пример, если вы еще не поняли его, исходя из замечаний, предполагающих, что вы используете json.Unmarshal

Playground link

package main 

import (
    "fmt" 
    "log" 
    "encoding/json" 
) 

func main() { 
    str := "[2,15,23]" 
    ints, err := convertToIntSlice(str) 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%v", ints) 
} 

type IntSlice struct { 
    Ints []int 
} 

func convertToIntSlice(s string) ([]int, error) { 
    a := &IntSlice{} 
    err := json.Unmarshal([]byte(`{"Ints":`+s+"}"), a) 
    return a.Ints, err 
} 
+1

Вам не нужны все эти накладные расходы при объявлении типа, вы можете Unmarshal непосредственно в int slice: https://play.golang.org/ р/3VgfnPo7Hz – hbejgel

0

Это немного хака, но вы могли бы обрабатывать его как csv:

import (
    "encoding/csv" 
    "strings" 
) 

in := `"[2,15,23]"` 
r := csv.NewReader(strings.NewReader(in)) 

records, err := r.ReadAll() 
Смежные вопросы