3 回答
TA贡献1796条经验 获得超10个赞
您可以使用符文文字和位移位来组装常量。它不会太紧凑,但它将是“安全的”(这意味着您可以在常量表达式中看到字符):
const TagABCD Tag = 'a'<<24 + 'b'<<16 + 'c'<<8 + 'd'
或者,您可以将其写在多行中,以便字母在列中对齐:
const TagABCD2 Tag = 0 +
'a'<<24 +
'b'<<16 +
'c'<<8 +
'd'
TA贡献1850条经验 获得超11个赞
要扩展 icza 的答案,并提高标签声明的可读性,您可以:
以 的形式声明帮助器常量,其中 是相关的 ASCII 字符,并且是该字符在 4 个字符标记中的位置。
<letter><number>
<letter>
<number>
通过 OR 'ing 帮助器常量来组合标记常量
|
import "fmt"
const (
a1 uint32 = 'a'<<(iota*8)
a2
a3
a4
)
// other similar const declarations for b1,b2,b3,b4 and so on
// must repeat the keyword const to reset iota
const Tag_abcd = a4 | b3 | c2 | d1
const Tag_ddba = d4 | d3 | b2 | a1
func main() {
fmt.Printf("%x\n", Tag_abcd) // 61626364
fmt.Printf("%x\n", Tag_ddba) // 64646261
}
优点是:
对于人类维护者来说,标签声明可能更容易阅读和直接
借助 IDE 支持,可以轻松重构帮助程序标识符
缺点是:
源可能会变得更加冗长,但您可以通过将帮助程序 const 隔离到单独的文件中来缓解这种情况
对于大写的 ASCII,帮助程序将变为导出,因此您可能必须在标识符前面加上或类似的技巧
A1
_
断续器
TA贡献1836条经验 获得超13个赞
- 3 回答
- 0 关注
- 87 浏览
添加回答
举报