new 主要用于結構體的初始化
創(chuàng)新互聯(lián)專注于徐匯企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設公司,商城網(wǎng)站建設。徐匯網(wǎng)站建設公司,為徐匯等地區(qū)提供建站服務。全流程按需規(guī)劃網(wǎng)站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
make用于數(shù)組array,切片slice,協(xié)程chnnel的初始化
例如: users:=make([10]int);
msg:=make(chan int);
new會分配結構空間,并初始化為清空為零,不進一步初始化
new之后需要一個指針來指向這個結構
make會分配結構空間及其附屬空間,并完成其間的指針初始化
make返回這個結構空間,不另外分配一個指針
例子new:
var p *[]int = new([]int)
或
p := new([]int)
以上分配了一個slice結構,但是結構中的應該指向底層數(shù)組的ptr指針為空,故實際不能往這個slice里面存取數(shù)據(jù)
同時分配了一個指針p,也即(在32位系統(tǒng)中)占4個字節(jié)并存放slice結構的地址
例子make:
var v []int = make([]int, 0)
v := make([]int, 0)
以上分配了一個slice結構,且結構中的應該指向底層數(shù)組的ptr指針已經(jīng)指向了某個底層數(shù)組,這個底層數(shù)組應該已經(jīng)分配了,故這個slice已經(jīng)可以使用了
注意v就是這個slice結構,而不是一個指向slice的指針
上述僅是示例,一般使用時都會明確長度和容量:v := make([]int, 10, 50)
結論:
由上可見,用new來分配slice的意義不大,因為沒有恰當?shù)某跏蓟?,無法直接使用
有附帶空間的結構,使用make來初始化,可以完成內(nèi)部指針初始化,其后可以立即使用
要判斷數(shù)據(jù)類型用Go空接口: 建函數(shù)t 設置參數(shù)i 類型空接口空接口接受任何數(shù)據(jù)類型 func t(i interface{}) { //函數(shù)t 參數(shù)i switch i.(type) { //選語句switch case string: //字符做事情 case int: //整...
隊列的概念在 順序隊列 中,而使用循環(huán)隊列的目的主要是規(guī)避假溢出造成的空間浪費,在使用循環(huán)隊列處理假溢出時,主要有三種解決方案
本文提供后兩種解決方案。
順序隊和循環(huán)隊列是一種特殊的線性表,與順序棧類似,都是使用一組地址連續(xù)的存儲單元依次存放自隊頭到隊尾的數(shù)據(jù)元素,同時附設隊頭(front)和隊尾(rear)兩個指針,但我們要明白一點,這個指針并不是指針變量,而是用來表示數(shù)組當中元素下標的位置。
本文使用切片來完成的循環(huán)隊列,由于一開始使用三個參數(shù)的make關鍵字創(chuàng)建切片,在輸出的結果中不包含nil值(看起來很舒服),而且在驗證的過程中發(fā)現(xiàn)使用append()函數(shù)時切片內(nèi)置的cap會發(fā)生變化,在消除了種種障礙后得到了一個四不像的循環(huán)隊列,即設置的指針是順序隊列的指針,但實際上進行的操作是順序隊列的操作。最后是對make()函數(shù)和append()函數(shù)的一些使用體驗和小結,隊列的應用放在鏈隊好了。
官方描述(片段)
即切片是一個抽象層,底層是對數(shù)組的引用。
當我們使用
構建出來的切片的每個位置的值都被賦為interface類型的初始值nil,但是nil值也是有大小的。
而使用
來進行初始化時,雖然生成的切片中不包含nil值,但是無法通過設置的指針變量來完成入隊和出隊的操作,只能使用append()函數(shù)來進行操作
在go語言中,切片是一片連續(xù)的內(nèi)存空間加上長度與容量的標識,比數(shù)組更為常用。使用 append 關鍵字向切片中追加元素也是常見的切片操作
正是基于此,在使用go語言完成循環(huán)隊列時,首先想到的就是使用make(type, len, cap)關鍵字方式完成切片初始化,然后使用append()函數(shù)來操作該切片,但這一方式出現(xiàn)了很多問題。在使用append()函數(shù)時,切片的cap可能會發(fā)生變化,用不好就會發(fā)生擴容或收縮。最終造成的結果是一個四不像的結果,入隊和出隊操作變得與指針變量無關,失去了作為循環(huán)隊列的意義,用在順序隊列還算合適。
參考博客:
Go語言中的Nil
Golang之nil
Go 語言設計與實現(xiàn)
new是內(nèi)建函數(shù),作用是初始化一個指向類型的指針,make的作用是slice,map或chan初始化并返回引用,第一個參數(shù)是一個類型,第二個參數(shù)是長度。
方法名與對象相關,函數(shù)名與對象無關,其實區(qū)別不大.有時需要面向對象思想時用方法名嘍.