3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
您可以使用符文文字和位移位來(lái)組裝常量。它不會(huì)太緊湊,但它將是“安全的”(這意味著您可以在常量表達(dá)式中看到字符):
const TagABCD Tag = 'a'<<24 + 'b'<<16 + 'c'<<8 + 'd'
或者,您可以將其寫(xiě)在多行中,以便字母在列中對(duì)齊:
const TagABCD2 Tag = 0 +
'a'<<24 +
'b'<<16 +
'c'<<8 +
'd'

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
要擴(kuò)展 icza 的答案,并提高標(biāo)簽聲明的可讀性,您可以:
以 的形式聲明幫助器常量,其中 是相關(guān)的 ASCII 字符,并且是該字符在 4 個(gè)字符標(biāo)記中的位置。
<letter><number>
<letter>
<number>
通過(guò) OR 'ing 幫助器常量來(lái)組合標(biāo)記常量
|
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
}
優(yōu)點(diǎn)是:
對(duì)于人類(lèi)維護(hù)者來(lái)說(shuō),標(biāo)簽聲明可能更容易閱讀和直接
借助 IDE 支持,可以輕松重構(gòu)幫助程序標(biāo)識(shí)符
缺點(diǎn)是:
源可能會(huì)變得更加冗長(zhǎng),但您可以通過(guò)將幫助程序 const 隔離到單獨(dú)的文件中來(lái)緩解這種情況
對(duì)于大寫(xiě)的 ASCII,幫助程序?qū)⒆優(yōu)閷?dǎo)出,因此您可能必須在標(biāo)識(shí)符前面加上或類(lèi)似的技巧
A1
_
斷續(xù)器

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
您可以使用 go generate 將復(fù)合常量值解析為不同的內(nèi)存分配。
維護(hù)這個(gè)實(shí)現(xiàn)是相當(dāng)復(fù)雜的,但是如果你有一個(gè)團(tuán)隊(duì)需要立即知道這有什么作用以及何時(shí)可以安全地重構(gòu)它。
- 3 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報(bào)