golang中带有整数和nil值的数组?

Par*_*osh 1 arrays null integer go

我是 golang 的新手。但我找不到答案。

在python中我可以做到,

array = [1, 2, 3, None, 5]
Run Code Online (Sandbox Code Playgroud)

但是当我写的时候

var array = [5]int {1, 2, 3, nil, 5}
Run Code Online (Sandbox Code Playgroud)

编译器给了我以下错误:

cannot convert nil to type int
Run Code Online (Sandbox Code Playgroud)

如何在 golang 中创建一个混合了整数和 nil 值的数组?

Mad*_*bat 6

先说点理论。Python 是一种动态类型语言。虽然每个单独的值都有一个类型,但可以毫无问题地为您的变量分配任何类型的值。因此,python 集合可以包含多种类型的值并且不会抱怨。以下是一个有效的 python 元组(1, 'a', None, True)。Go 是一种静态类型语言。如果您的变量定义为整数,则不能为其分配任何非整数值。因此,Go 中的集合具有类型并且只能包含单一类型的对象。

现在开始练习。有几种方法可以做你想做的事。经典的 C 方法是选择一个您永远不会遇到的整数值并将其用作空值。0 或 -1 之类的。虽然这不是很健壮。

一种更惯用的方法是定义自己的类型。

package main

import "fmt"

type NilInt struct {
    value int
    null  bool
}

func (n *NilInt) Value() interface{} {
    if n.null {
        return nil
    }
    return n.value
}

func NewInt(x int) NilInt {
    return NilInt{x, false}
}

func NewNil() NilInt {
    return NilInt{0, true}
}

func main() {
    var x = []NilInt{NewNil(), NewInt(10), NewNil(), NewInt(5)}
    for _, i := range x {
        fmt.Printf("%v ", i.Value())
    }
}
Run Code Online (Sandbox Code Playgroud)