我是新手,我在python中列出了元组,如下所示:
data = [
(435347,'cat'),
(435347,'feline'),
(435347,'lion'),
(6765756,'dog'),
(6765756,'hound'),
(6765756,'puppy'),
(435347,'kitten'),
(987977,'frog')
]
我怎样才能将数据转换成GO等价物,我用Google搜索了它,但是他们用相同的数据类型的多维数组指定了它,
int_list := [4][2]int{{1, 0}, {2, 0}, {3, 0}, {4, 0}}
string_list := make([][]string, 0)
a := [1][2]string{{"lion","dog"}}
帮我解决..!
更新:
用于数组的混合类型集合:
array := []interface{}{1, "dog", "lion", 12, 45.09, true, false}
答案 0 :(得分:6)
这里有两种可能的解决方案:混合数据类型的实际多维数组(你似乎要求的)和结构数组(你可能想要的)。
如果你真的想要做混合类型的多维数组,你需要使用接口:
interfaceArray := [2][2]interface{}{{1,"dog"},{2,"cat"}}
fmt.Println(interfaceArray)
输出:
[[1只狗] [2只猫]]
接口必须小心处理,因为它们可以......任何东西。这意味着没有强制执行第一个参数是int,第二个参数是字符串。我可以轻松添加{"lion", 3}
并且编译器会很高兴,但是如果它没有先检查类型,你的程序就会崩溃。
您可以在接口上执行type conversions and assertions以确保正确的数据类型。
将python元组放在列表中并不会使它成为一个多维数组。 Go中最接近的等价物是结构数组。
type animal struct {
id int
name string
}
animalList := [2]animal{{1, "cat"}, {2, "dog"}}
fmt.Println(animalList)
输出:
[{1 cat} {2 dog}]
在这种情况下,类型已明确定义,我无法将{"lion", 3}
存储在数组中。
最后注释:[size]type
定义了一个数组。 []type
定义了一个切片。我在这里使用数组,因为这是你在问题中提到的,但切片就像(或可能更合适)一样。
答案 1 :(得分:6)
您无法使用两种不同的类型创建多维数组。更好地使用结构。希望这对你的目的有用。
package main
import "fmt"
type Data struct {
i int
s string
}
func main() {
data := []Data{
{435347,"cat"},
{435347,"feline"},
{435347,"lion"},
}
fmt.Println(data)
}