小编she*_*baw的帖子

为什么errorString是一个结构,而不是一个字符串

我正在阅读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)

go

11
推荐指数
2
解决办法
1010
查看次数

L做什么?

这是做什么的?

const wchar_t *s = L"test";
Run Code Online (Sandbox Code Playgroud)

如果wchar_t在我的机器上是两个字节,那么我们为什么要告诉编译器应该以每个元素长的方式处理字符串,即大小为四个字节?

c c++ string

10
推荐指数
3
解决办法
2187
查看次数

不能在寻址模式下减去寄存器?

我读完了 PC 汇编语言,我正在研究汇编中 RC4 加密的实现。我无法理解的是为什么

mov eax, [edx+ecx]
Run Code Online (Sandbox Code Playgroud)

有效但

mov eax, [edx-ecx]
Run Code Online (Sandbox Code Playgroud)

没有。内联汇编器给了我这个错误信息,

“第二个操作数”中的非常量表达式

这意味着什么?提前致谢。

x86 assembly inline-assembly addressing-mode

2
推荐指数
2
解决办法
744
查看次数

标签 统计

addressing-mode ×1

assembly ×1

c ×1

c++ ×1

go ×1

inline-assembly ×1

string ×1

x86 ×1