成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 語言為什么建議定義零值可用的結構體?

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

?1.介紹

在 Go 語言中,通過聲明或者通過調用 new 為變量分配存儲空間,或者通過復合字面量或調用 make 創建新值時。

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

2.Golang 類型的零值

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

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

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

3.Golang 定義零值可用的結構體

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

盡量定義零值可用的結構體

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

type Mutex struct {
state int32
sema uint32
}

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

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

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

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

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

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

示例代碼:

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

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

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

指針類型的零值

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

示例代碼:

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.總結

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

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

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

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2023-07-29 15:03:29

2021-04-20 09:00:48

Go 語言結構體type

2023-12-27 08:12:04

切片Go語言

2020-04-07 16:12:56

Go編程語言開發

2021-11-15 06:56:46

Go語言Tag

2021-07-29 18:48:32

Swift iOS macOS

2020-12-02 08:45:36

Go語言

2020-11-30 06:17:03

Go語言

2020-11-26 06:40:24

Go語言基礎

2020-11-23 08:54:14

Go語言結構體

2022-09-26 00:00:01

Go語言函數

2025-06-12 00:21:27

2024-01-02 10:38:22

Go語言數組

2016-09-27 21:25:08

Go語言Ken Thompso

2018-05-02 12:34:48

2020-12-02 09:10:22

Go結構數據類型

2023-08-30 10:20:34

編程語言Python

2022-01-09 23:04:19

語言打印結構體

2023-03-06 08:01:25

structGo語言

2022-01-17 16:09:43

Go語言開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕中文字幕 | 国产精品视频网 | 欧美男人天堂 | av天天澡天天爽天天av | 日韩羞羞 | 久久久久久中文字幕 | 国产高清自拍视频在线观看 | 精品久久久久久久久久久 | 欧美午夜一区 | 日韩久久久久久 | 久久久久国产精品 | 中文字幕 国产 | 亚洲一区二区三区 | 国产一区二区影院 | 日本久久久影视 | 欧美久久一级特黄毛片 | 日韩激情在线 | 国产成人久久精品一区二区三区 | 国产二区在线播放 | 久久人| 欧美日韩久久精品 | 久久九九99| 日韩在线免费视频 | 91精品国产综合久久久久久丝袜 | av三级 | 天堂综合 | 福利久久| 日韩精品久久一区二区三区 | 亚洲精品v | 亚洲在线| 天天干天天操天天射 | 日韩精品在线免费观看视频 | 国产精品 亚洲一区 | 一区观看| 国产高清视频在线观看 | 欧美在线视频一区二区 | 成人av观看 | 久久精品中文 | 国产一在线观看 | 日本大片在线播放 | 午夜男人免费视频 |