Golang空結(jié)構(gòu)體struct{}用途,你知道嗎
golang 空結(jié)構(gòu)體 struct{} 可以用來(lái)節(jié)省內(nèi)存
a := struct{}{}
println(unsafe.Sizeof(a))
// Output: 0
理由如下:
- 如果使用的是map,而且map又很長(zhǎng),通常會(huì)節(jié)省不少資源
- 空struct{}也在向別人表明,這里并不需要一個(gè)值
本例說(shuō)明在map里節(jié)省資源的用途:
set := make(map[string]struct{})
for _, value := range []string{"apple", "orange", "apple"} {
set[value] = struct{}{}
}
fmt.Println(set)
// Output: map[orange:{} apple:{}]
下例,演示了struct{}可以向人展示對(duì)象中不需要任何數(shù)據(jù),僅包含需要方法。在調(diào)用也并無(wú)任何區(qū)別
type Lamp struct{}
func (l Lamp) On() {
println("On")
}
func (l Lamp) Off() {
println("Off")
}
func main() {
// Case #1.
var lamp Lamp
lamp.On()
lamp.Off()
// Output:
// on
// off
// Case #2.
Lamp{}.On()
Lamp{}.Off()
// Output:
// on
// off
}
還有其他情況,比如有時(shí)候使用channel,但并不需要附帶任何數(shù)據(jù)。
func worker(ch chan struct{}) {
// Receive a message from the main program.
<-ch
println("roger")
// Send a message to the main program.
close(ch)
}
func main() {
ch := make(chan struct{})
go worker(ch)
// Send a message to a worker.
ch <- struct{}{}
// Receive a message from the worker.
<-ch
println(“roger")
// Output:
// roger
// roger
}
到此這篇關(guān)于Golang空結(jié)構(gòu)體struct{}用途,你知道嗎的文章就介紹到這了,更多相關(guān)Golang空結(jié)構(gòu)體struct{}內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Go語(yǔ)言空結(jié)構(gòu)體詳解
- 一文帶你感受Go語(yǔ)言空結(jié)構(gòu)體的魔力
- 詳解Go語(yǔ)言中空結(jié)構(gòu)體的慣用法
- GO語(yǔ)言中ni,零值與空結(jié)構(gòu)體的使用
- 關(guān)于Go 空結(jié)構(gòu)體的 3 種使用場(chǎng)景
- 細(xì)說(shuō)Go語(yǔ)言中空結(jié)構(gòu)體的奇妙用途
- Go空結(jié)構(gòu)體struct{}的作用是什么
- 簡(jiǎn)單聊聊Go語(yǔ)言中空結(jié)構(gòu)體和空字符串的特殊之處
- go語(yǔ)言中空結(jié)構(gòu)體的實(shí)現(xiàn)
- Golang 空結(jié)構(gòu)體特性與用法詳解
相關(guān)文章
golang替換無(wú)法顯示的特殊字符(\u0000,?\000,?^@)
這篇文章主要介紹了golang替換無(wú)法顯示的特殊字符,包括的字符有\(zhòng)u0000,?\000,?^@等,下文詳細(xì)資料,需要的小伙伴可以參考一下2022-04-04
解讀unsafe.Pointer和uintptr的區(qū)別
這篇文章主要介紹了解讀unsafe.Pointer和uintptr的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Go語(yǔ)言中println和fmt.Println區(qū)別
本文主要介紹了Go語(yǔ)言中println和fmt.Println區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
golang時(shí)間/時(shí)間戳的獲取與轉(zhuǎn)換實(shí)例代碼
說(shuō)實(shí)話,golang的時(shí)間轉(zhuǎn)化還是很麻煩的,最起碼比php麻煩很多,下面這篇文章主要給大家介紹了關(guān)于golang時(shí)間/時(shí)間戳的獲取與轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
Go 簡(jiǎn)單實(shí)現(xiàn)多租戶數(shù)據(jù)庫(kù)隔離
本文主要介紹了Go 簡(jiǎn)單實(shí)現(xiàn)多租戶數(shù)據(jù)庫(kù)隔離,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05

