如何在golang中使用type.NewArray初始化数组?

时间:2017-12-06 18:29:24

标签: arrays go

基本上,我想在types模块中使用Array类型结构,但我无法初始化它。你有什么要把Type作为第一个参数传递?

package main

import (
    "fmt"
    "go/types"
)

func main() {
    var a *types.Array
    a = types.NewArray(types.Int, 2) //error here
    fmt.Println(a)
}

1 个答案:

答案 0 :(得分:1)

我也是新人。对我来说,这个问题看起来并不愚蠢。不幸的是,还没有人解释过如何使用NewArray。在我看来,golang社区不是很友好我现在遇到了比真正的帮助更多的downvoting。

顺便说一下,我参加了Go之旅:)但是无论如何我很困惑这个问题如何获取一个对象的类型通常会带你到reflect package(在类似于golang get type of an object的google中),它什么都没有与types.Type一样。我花了一些时间来弄清楚如何获得types.Type个对象,对于那些有其他语言经验的人来说,这并不明显。

所以要使用NewArray方法,你需要传递一个实现types.Type的对象,如mkopriva指出的那样。我最终得到了

package main

import (
    "fmt"
    "go/types"
)

type NewType int

func (v NewType) String() string {
    return string(v)
}

func (v NewType) Underlying() types.Type {
    return types.Type(v)
}

func main() {
    var a *types.Array
    a = types.NewArray(NewType(0), 2)
    fmt.Println(a)
}

使用了带有基础int的新类型。我想我还不懂golang中的东西,因为使用这样简单的东西我必须编写像StringUnderlying这样无用的方法,因为实现它们没用,我看不到之所以被迫写这样的代码。如果golang专家解释这个问题我会批评!