偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go 語言為什么建議定義零值可用的結(jié)構(gòu)體?

開發(fā) 前端
本文我們介紹 Go 語言的每個原生類型都會有默認值,即零值。通過列舉 Go 標準庫 sync.Mutex 結(jié)構(gòu)體類型,介紹在 Go 語言中,定義零值可用的結(jié)構(gòu)體的好處。

?1.介紹

在 Go 語言中,通過聲明或者通過調(diào)用 new 為變量分配存儲空間,或者通過復(fù)合字面量或調(diào)用 make 創(chuàng)建新值時。

如果未提供顯式初始化,則會為變量或值指定默認值,此類變量或值的每個元素都設(shè)置為其類型的零值。

2.Golang 類型的零值

在 Go 語言中,原生類型都有默認值,即類型的零值。

  • 布爾型的零值:false
  • 整型的零值:0
  • 字符串類型的零值:""
  • 指針、函數(shù)、接口、切片、通道、映射的零值:nil

需要注意的是,Go 語言類型的零值初始化是遞歸完成的,即數(shù)組、結(jié)構(gòu)體的每個元素都進行零值初始化。

3.Golang 定義零值可用的結(jié)構(gòu)體

在 Go 語言中,定義零值可用的結(jié)構(gòu)體不僅對程序的安全性和正確性非常重要,它還可以無需預(yù)先顯式初始化即可直接使用,使 Go 程序代碼更優(yōu)雅。

盡量定義零值可用的結(jié)構(gòu)體

例如 Go 標準庫 sync? 中的 sync.Mutex 結(jié)構(gòu)體,它就是被定義為零值可用的結(jié)構(gòu)體類型。

type Mutex struct {
state int32
sema uint32
}

因為 sync.Mutex? 包含兩個不可導(dǎo)出的整型字段,所以聲明 sync.Mutex 類型的值時,它的字段的值都被設(shè)置為 0。

在我們使用 sync.Mutex 時,無需預(yù)先顯式初始化,即可直接使用。

但是,需要注意的是,sync.Mutex 類型的變量在被使用之后,不能被復(fù)制。

切片類型是零值可用的類型

雖然我們在 Part 02 中講到,切片的零值是 nil,我們知道,對于值為 nil 的變量,需要預(yù)先為其進行賦值(可用的值)之后,我們才可以使用該變量。

但是 Golang 的切片類型比較特殊,它是零值可用的類型,我們可以直接對其進行 append 操作,而不會觸發(fā)引用 nil 的錯誤。

示例代碼:

var id []int
id = append(id, 1)
id = append(id, 2)
fmt.Println(id)

閱讀上面這段代碼,我們聲明一個元素為整型的切片類型的變量 id,在未預(yù)先對其進行顯式初始化的情況下,直接使用 append 函數(shù)為其追加數(shù)據(jù),結(jié)果是可以正常執(zhí)行,未觸發(fā)引用 nil 變量的錯誤。

但是,切片類型作為零值可用的類型,也有其局限性,以上示例代碼中,我們不能通過下標的方式操作切片的值。

指針類型的零值

另一個比較特殊的類型是指針,我們在 Part 02 講到,指針的零值也是 nil,但是 nil 指針可以調(diào)用其類型的方法。

示例代碼:

type User struct {
Id int
Name string
}

func (u *User) UserInfo() string {
if u == nil {
return "Not found"
}
return fmt.Sprintf("{id:%d,name:%s}", u.Id, u.Name)
}

var u1 *User
data := u1.UserInfo()
fmt.Println(data)

4.總結(jié)

本文我們介紹 Go 語言的每個原生類型都會有默認值,即零值。

通過列舉 Go 標準庫 sync.Mutex 結(jié)構(gòu)體類型,介紹在 Go 語言中,定義零值可用的結(jié)構(gòu)體的好處。

順便提到零值為 nil 的切片和指針兩種類型的特殊之處。

責(zé)任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2021-04-20 09:00:48

Go 語言結(jié)構(gòu)體type

2023-07-29 15:03:29

2023-12-27 08:12:04

切片Go語言

2020-04-07 16:12:56

Go編程語言開發(fā)

2021-11-15 06:56:46

Go語言Tag

2021-07-29 18:48:32

Swift iOS macOS

2022-09-26 00:00:01

Go語言函數(shù)

2020-12-02 08:45:36

Go語言

2020-11-30 06:17:03

Go語言

2020-11-26 06:40:24

Go語言基礎(chǔ)

2020-11-23 08:54:14

Go語言結(jié)構(gòu)體

2025-06-12 00:21:27

2024-01-02 10:38:22

Go語言數(shù)組

2016-09-27 21:25:08

Go語言Ken Thompso

2018-05-02 12:34:48

2020-12-02 09:10:22

Go結(jié)構(gòu)數(shù)據(jù)類型

2023-08-30 10:20:34

編程語言Python

2022-01-09 23:04:19

語言打印結(jié)構(gòu)體

2023-03-06 08:01:25

structGo語言

2022-01-17 16:09:43

Go語言開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號