Types Go Golang:自定义类型上的类型断言

Types Go Golang:自定义类型上的类型断言,types,interface,go,type-conversion,Types,Interface,Go,Type Conversion,我正在练习使用堆进行排序,但是 prog.go:85: type bucket is not an expression prog.go:105: cannot use heap.Pop(bucket[i].([]IntArr)) (type interface {}) as type int in assignment: need type assertion [process exited with non-zero status] 我遇到了这些错误,无法正确地键入assert

我正在练习使用堆进行排序,但是

  prog.go:85: type bucket is not an expression
  prog.go:105: cannot use heap.Pop(bucket[i].([]IntArr)) (type interface {}) as type int in assignment: need type assertion
  [process exited with non-zero status]
我遇到了这些错误,无法正确地键入assert

问题来自以下几行:

  heap.Push(bucket[x].([]IntArr), elem)

  arr[index] = heap.Pop(bucket[i].([]IntArr))
因为我想使用堆结构从每个bucket中提取值

并且每个桶都是
[]intar

intar
[]int
如下所示

type IntArr []int
type bucket [10]IntArr
我在周末尝试了很多方法,但都不明白,我非常感谢。

来自:

对于接口类型为x的表达式和类型为T的表达式,主 表情

x.(T)

断言x不是nil,并且存储在x中的值是T类型。 符号x.(T)称为类型断言

bucket[x]
不是接口类型的表达式,请参阅更多。

来自:

对于接口类型为x的表达式和类型为T的表达式,主 表情

x.(T)

断言x不是nil,并且存储在x中的值是T类型。 符号x.(T)称为类型断言


bucket[x]
不是接口类型的表达式,请参阅更多。

要使用heap包,您应该为您的类型实现heap.interface(在本例中,为您的IntArr类型)。您可以在此处找到示例:

然后你可以做像这样的事情

heap.Push(bucket[x], elem)

要使用heap包,您应该为您的类型实现heap.Interface(在本例中,为您的IntArr类型)。您可以在此处找到示例:

然后你可以做像这样的事情

heap.Push(bucket[x], elem)

我试过了,但还是不起作用。。。你将如何更改我的代码以使其工作以此为起点。调试您的算法,您的排序不起作用我尝试了这个,但仍然不起作用。。。你将如何更改我的代码以使其工作以此为起点。调试您的算法,您的排序不起作用是的,您是对的,但我不知道如何使bucket[x]成为具有类型断言的接口类型,我没有做到这一点。你能简要地解释一下你将如何改变我的代码吗?@ MaynardEPSILON,我认为你应该考虑关于实现<代码>堆>接口>代码>而不是任何类型的断言。是的,你是对的,但是我不知道如何使桶[X]是一个带有类型断言的接口类型,而我不能做到这一点。你能简要地解释一下你将如何改变我的代码吗?@ MaynardEPSILON,我认为你应该考虑关于执行<代码>堆。接口< /> >而不是任何类型的断言。