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 值的数组?
先说点理论。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)