Golang中如何获取数组/切片的实际字节大小
Golang中如何获取数组/切片的实际字节大小 我正在尝试实现基础列表操作,而不使用像len()这样的内置方法。但我找不到获取切片/数组字节大小的方法来实现length()函数。
我尝试过unsafe.Sizeof()方法,但根据文档,它只给出切片描述符的大小,而不是切片引用的内存大小。
type IntList []int
func main() {
list := IntList{1, 2, 3, 4}
list.Length() // 期望结果 - 4
}
// 假设int类型包含4个字节
func (l IntList) Length() int {
size := actualByteSize(l) / 4
return int(size)
}
我是Go语言的新手。😊
更多关于Golang中如何获取数组/切片的实际字节大小的实战教程也可以访问 https://www.itying.com/category-94-b0.html
可能与以下代码相同:
func (list *IntList) Length() int {
return len(*list)
}
更多关于Golang中如何获取数组/切片的实际字节大小的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢!但正如我提到的,我想在不使用内置长度函数的情况下获取数组的长度。
您的回答似乎没有完整送达。请重新发送一次… 在此期间,您可以查阅 https://blog.golang.org/go-slices-usage-and-internals
我想在不使用相关内置方法的情况下实现这个功能,因为我知道常规方法是:
byteSize(intArray) / size_of_int
我想知道在 Go 中是否有任何方法可以实现这一点。
在这种情况下,您可以使用 encoding/binary 包和 Size 函数,例如
https://play.golang.org/p/HhJif66VwY
package main
import (
"encoding/binary"
"fmt"
)
func main() {
var i int
fmt.Println(binary.Size(i))
}
不,正如我在示例代码中提到的,是指整数数组的长度。
list := IntList{1, 2, 3, 4}
list.Length() // 预期结果 - 4
我想在不知道该特定数组中元素数量的情况下获取此数组的字节大小。实际上我只是想重新实现内置的len()方法(听起来可能有点傻😄但我只是想尝试一下)
切片实际上是一个类似这样的结构体:
struct {
address to array
len int
cap int
}
因此,不使用len()获取长度可以这样实现:
package main
import (
"fmt"
"unsafe"
)
type slice struct {
ptr uintptr
len int
cap int
}
func main() {
someSlice := make([]byte, 666)
fmt.Println((*slice)(unsafe.Pointer(&someSlice)).len)
}


