作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
想要在 Go 中有一个空的字符/字节,其大小/长度为零,例如 byte("")
。
func main() {
var a byte = '' // not working
var a byte = 0 // not working
}
更具体的例子是
func removeOuterParentheses(S string) string {
var stack []int
var res []byte
for i, b := range []byte(S) {
if b == '(' {
stack = append(stack, i)
} else {
if len(stack) == 1 {
res[stack[0]] = '' // set this byte to be empty
res[i] = '' // / set this byte to be empty
}
stack = stack[:len(stack)-1]
}
}
return string(res)
}
最佳答案
byte
是uint8
类型的别名。拥有一个“空字节”并没有任何意义,就像拥有一个“空数字”没有任何意义一样(你可以拥有数字 0,但什么是“空”数字?)
您可以分配一个零值(b := byte(0)
,或var b byte
),这可用于指示尚未分配任何内容(“零值”)。 0
的字节值被称为“空字节”。它通常从不出现在常规文本中,但经常出现在二进制数据(例如图像、压缩文件等)中
这与 byte("")
不同,后者是字节的序列。您可以有一个零字节序列。打个比方:我可以有一个钱包里没有钱,但我不能有一个值“空”的硬币。
如果您真的想区分“0 值”和“从不设置”,您可以使用指针或结构。带有指针的示例:
var b *byte
fmt.Println(b) // <nil>, since it's a pointer which has no address to point to.
one := byte(0)
b = &one // Set address to one.
fmt.Println(b, *b) // 0xc000014178 0 (first value will be different, as it's
// a memory address).
在这里你需要小心一点,因为如果你还没有赋值,*b
将会是一个 panic。根据它的使用方式,它可以很好地工作,也可以非常难用。在标准库中使用它的一个例子是 flag
package .
另一种可能性是使用一个结构,该结构具有用于字节本身的单独字段和一个标志来记录它是否已被设置。在 database/sql
库中已经有 Null*
类型(例如 NullInt64
,您可以将其用作起点。
关于go - 如何在 Go 中表示空字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55712873/
我是一名优秀的程序员,十分优秀!