Hi,大家好,我是明哥,
在自己學習 Golang 的這段時間里,我寫了詳細的學習筆記放在我的個人微信公眾號 《Go編程時光》,對于 Go 語言,我也算是個初學者,因此寫的東西應該會比較適合剛接觸的同學,如果你也是剛學習 Go 語言,不防關注一下,一起學習,一起成長,
我的在線博客:http://golang.iswbm.com
我的 Github:github.com/iswbm/GolangCodingTime
1. new 函式
在官方檔案中,new 函式的描述如下
// The new built-in function allocates memory. The first argument is a type,
// not a value, and the value returned is a pointer to a newly
// allocated zero value of that type.
func new(Type) *Type
可以看到,new 只能傳遞一個引數,該引數為一個任意型別,可以是Go語言內建的型別,也可以是你自定義的型別
那么 new 函式到底做了哪些事呢:
- 分配記憶體
- 設定零值
- 回傳指標(重要)
舉個例子
import "fmt"
type Student struct {
name string
age int
}
func main() {
// new 一個內建型別
num := new(int)
fmt.Println(*num) //列印零值:0
// new 一個自定義型別
s := new(Student)
s.name = "wangbm"
}
2. make 函式
在官方檔案中,make 函式的描述如下
//The make built-in function allocates and initializes an object
//of type slice, map, or chan (only). Like new, the first argument is
// a type, not a value. Unlike new, make's return type is the same as
// the type of its argument, not a pointer to it.func make(t Type, size ...IntegerType) Type
翻譯一下注釋內容
- 內建函式 make 用來為 slice,map 或 chan 型別(注意:也只能用在這三種型別上)分配記憶體和初始化一個物件
- make 回傳型別的本身而不是指標,而回傳值也依賴于具體傳入的型別,因為這三種型別就是參考型別,所以就沒有必要回傳他們的指標了
注意,因為這三種型別是參考型別,所以必須得初始化(size和cap),但是不是置為零值,這個和new是不一樣的,
舉幾個例子
//切片
a := make([]int, 2, 10)
// 字典
b := make(map[string]int)
// 通道
c := make(chan int, 10)
3. 總結
new:為所有的型別分配記憶體,并初始化為零值,回傳指標,
make:只能為 slice,map,chan 分配記憶體,并初始化,回傳的是型別,
另外,目前來看 new 函式并不常用,大家更喜歡使用短陳述句宣告的方式,
a := new(int)
a = 1
// 等價于
a := 1
但是 make 就不一樣了,它的地位無可替代,在使用slice、map以及channel的時候,還是要使用make進行初始化,然后才可以對他們進行操作,
系列導讀
01. 開發環境的搭建(Goland & VS Code)
02. 學習五種變數創建的方法
03. 詳解資料型別:****整形與浮點型
04. 詳解資料型別:byte、rune與string
05. 詳解資料型別:陣列與切片
06. 詳解資料型別:字典與布爾型別
07. 詳解資料型別:指標
08. 面向物件編程:結構體與繼承
09. 一篇文章理解 Go 里的函式
10. Go語言流程控制:if-else 條件陳述句
11. Go語言流程控制:switch-case 選擇陳述句
12. Go語言流程控制:for 回圈陳述句
13. Go語言流程控制:goto 無條件跳轉
14. Go語言流程控制:defer 延遲呼叫
15. 面向物件編程:介面與多型
16. 關鍵字:make 和 new 的區別?
17. 一篇文章理解 Go 里的陳述句塊與作用域
18. 學習 Go 協程:goroutine
19. 學習 Go 協程:詳解信道/通道
20. 幾個信道死鎖經典錯誤案例詳解
21. 學習 Go 協程:WaitGroup
22. 學習 Go 協程:互斥鎖和讀寫鎖
23. Go 里的例外處理:panic 和 recover
24. 超詳細解讀 Go Modules 前世今生及入門使用
25. Go 語言中關于包匯入必學的 8 個知識點
26. 如何開源自己寫的模塊給別人用?
27. 說說 Go 語言中的型別斷言?
28. 這五點帶你理解Go語言的select用法

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/144574.html
標籤:Python
