Pin*_*juh 4 io unsigned range go
作为澄清我的问题的一个例子,在Google Go 1.0中,"io"包中定义了以下界面:
type Reader interface {
Read(p []byte) (n int, err error)
}
Run Code Online (Sandbox Code Playgroud)
特别是结果参数列表(n int, err error)引起了我的兴趣.根据接口文档,本质上字节数不能为负数:
它返回读取的字节数(0 <= n <= len(p))[...]
在C中,使用的原因是用于表示错误条件int的带内值-1(请参阅有效转到:多个返回值).由于具有多个返回值,因此不需要特殊的带内值.
Go 1.0中存在类型uint.
在不使用特殊带内值的情况下,使用int相对于uint仅使用正范围[0,∞)的值的具体原因是什么?
整数的事实数字类型是int.这部分是因为signed int以更明显的方式溢出.uint的一个小溢出最终看起来像一个有效的值,但是在一个期望正整数的地方,一个有符号整数的小溢出将是负的和恐慌,例如.切片.
这很重要,因为你通常将Read()和'p'切换为'n'到该长度.
例如.
n, err := a.Read(p)
p = p[:n]
processReadData(p)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |