当前位置: 首页 > 面试题库 >

如何在go中使用(通用)向量?

岳阳文
2023-03-14
问题内容

我正在使用Vector类型存储字节数组(可变大小)

store := vector.New(200);
...
rbuf := make([]byte, size);
...
store.Push(rbuf);

一切正常,但是当我尝试检索值时,编译器告诉我我需要使用类型断言。所以我添加了这些,然后尝试

for i := 0; i < store.Len(); i++ {
   el := store.At(i).([]byte); 
...

但是当我运行它时,它会失败:

interface is nil, not []uint8
throw: interface conversion

是否知道如何从Vector用于存储其数据的空Element接口中“投射” /转换为实际的[] byte数组,然后供以后使用?

更新(Go1):
矢量软件包已于2011-10-18删除。


问题答案:

这对我来说很好。您是否初始化了向量的前200个元素?如果您不这样做,则它们可能为零,这将是您错误的根源。

package main

import vector "container/vector"
import "fmt"

func main() {
     vec := vector.New(0);
     buf := make([]byte,10);
     vec.Push(buf);

     for i := 0; i < vec.Len(); i++ {
     el := vec.At(i).([]byte);
     fmt.Print(el,"\n");
     }
}


 类似资料:
  • 问题内容: 在新的Go语言中,如何调用C 代码?换句话说,如何包装我的C 类并在Go中使用它们? 问题答案: 更新: 我已经成功地将一个小型测试C ++类与Go链接在一起 如果您使用C接口包装C ++代码,则应该可以使用cgo调用您的库(请参阅中的gmp示例)。 我不确定C ++中的类概念是否真的可以在Go中表达,因为它没有继承。 这是一个例子: 我有一个C ++类定义为: 我想在Go中使用。我将

  • 问题内容: 假设我要编写一个在切片中查找值的函数 我直观地想写: 但是我无法通过Go做到这一点。我可以与 这样就可以了,但是在我的真实代码中,事情变得更加复杂(我需要进行slices [from:end]等),append等…,如果我在接口中重新定义了所有这些代码,我最终会拥有很多代码。有没有更好的办法? 问题答案: 您可以使用反射。我为项目编写了此函数,请随时使用它:

  • 问题内容: 我正在寻找一种解决方案,可以多路复用一些通道输出。 我有一个数据源,它是从我发送到单个通道的读取的。另一方面,我有一个从通道读取的websocket请求处理程序。现在,发生了两个客户端创建一个websocket连接的情况,它们均从同一通道读取,但每个客户端仅获得部分消息。 代码示例(简体): 现在,当两次被调用时,第二个调用仅返回在第一个调用中创建的通道,这将导致上述问题。 问题是:

  • 问题内容: 尝试使用Go的http包时,我无法确定的语法。尽管我尝试了其他一些被编译器拒绝的其他事情,但这里只有我标记的以下内容是我必须编译的。 该URL可以,因为可以正常使用,但是在我运行时,它只是一个空字符串,并且始终为零。我需要怎么做才能取出数据?编译器拒绝了其他尝试。 输出看起来像这样: 问题答案: 尝试给切片buf设置一个大小,例如 读取器最多读取给定缓冲区的len()。 来自io.go

  • 问题内容: 我需要在Go中对int64的较大值执行运算,例如求幂和除法,但是我遇到了溢出问题。我尝试将它们转换为float64,但随后遇到其他问题。这是我尝试过的。 我有一个整数变量,必须将其转换为float64才能使用方便的数学包(https://golang.org/pkg/math)。 但是,如果整数变量太大,则无法正确转换。我假设这是因为大小大于float64。例如: 我正在尝试使用mat

  • 问题内容: 通道将通信(值的交换)与同步相结合,以确保两个计算(goroutines)处于已知状态。 如何使用Google Go中的频道执行互斥功能? 问题答案: 将通道用作互斥对象的示例: 您也可以使用而不是减小内存大小。输入的值是(type 和一个空的content )。有关示例,请参见Ivan black的评论 。