我正在阅读The Go Programming Language一书及其对错误包和界面的描述
package errors
type error interface {
Error() string
}
func New(text string) error { return &errorString{text} }
type errorString struct { text string }
func (e *errorString) Error() string { return e.text }
Run Code Online (Sandbox Code Playgroud)
它说
errorString的基础类型是结构,而不是字符串,以保护其表示免受无意(或预谋)更新.
这是什么意思?包不会隐藏底层类型,因为errorString没有导出?
更新
这里是我使用实现测试代码errorString使用string来代替.请注意,当尝试从另一个包中使用它时,您不能只将字符串指定为错误.
package testerr
type Error interface {
Error() string
}
func New(text string) Error {
return errorString(text)
}
type errorString string
func (e errorString) Error() string { return string(e) }
Run Code Online (Sandbox Code Playgroud)
并使用建议的代码进行测试
func main() …Run Code Online (Sandbox Code Playgroud) 这是做什么的?
const wchar_t *s = L"test";
Run Code Online (Sandbox Code Playgroud)
如果wchar_t在我的机器上是两个字节,那么我们为什么要告诉编译器应该以每个元素长的方式处理字符串,即大小为四个字节?
我读完了 PC 汇编语言,我正在研究汇编中 RC4 加密的实现。我无法理解的是为什么
mov eax, [edx+ecx]
Run Code Online (Sandbox Code Playgroud)
有效但
mov eax, [edx-ecx]
Run Code Online (Sandbox Code Playgroud)
没有。内联汇编器给了我这个错误信息,
“第二个操作数”中的非常量表达式
这意味着什么?提前致谢。