2017-02-06 66 views
0

我在网上寻找答案,但没有人符合我的需求。将字符串转换为golang中的整数数组

我有以下格式的字符串:

"[2,15,23]" 

,我试图将其转换格式为:

[2,15,23] 

我需要的那种类型的皈依后更改为[] INT。我需要转换它,因为我想稍后使用它来创建一个接口类型在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

你不需要声明一个类型的所有这些开销,你可以直接在一个int片段中解组:https://play.golang.org/ p/3VgfnPo7Hz – hbejgel

0

这是轻微的hackish,但你可以把它当作csv处理:

import (
    "encoding/csv" 
    "strings" 
) 

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

records, err := r.ReadAll()