Сначала немного теории.Python - это динамически типизированный язык.В то время как каждое отдельное значение имеет тип, вашим переменным могут быть назначены значения любого типа без проблем.Как следствие, коллекции Python могут содержать несколько типов значений и не жаловаться.Ниже приведен корректный кортеж Python (1, 'a', None, True)
.Go - это статически типизированный язык.Если ваша переменная определена как целое число, вы не можете присвоить ей нецелое значение.Как следствие, коллекции в Go имеют тип и могут содержать только один тип объекта.
Теперь попрактикуйтесь.Есть несколько способов сделать то, что вы хотите.Классический способ Си состоит в том, чтобы выбрать целочисленное значение, с которым вы никогда не встретитесь, и использовать его как нулевое значение.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())
}
}