Go語言基礎之指針
區別於C/C++中的指針,Go語言中的指針不能進行偏移和運算,是安全指針。
要搞明白語言中的指針需要先知道3個概念:指針地址、指針類型和指針取值
Go語言中的指針
任何程序數據載入內存後,在內部都有他們的地址,這就是指針。而爲了保存一個數據在內存中的地址,我們就需要
指針變量。
比如,“”“永遠不要高估自己”這句話是我的座右銘,我想把它寫入程序中,程序一啓動這句話就要加載到內存中,我在
程序中吧這段話賦值給變量A,把內存地址複製給變量B,這時候B就是一個指針變量。通過變量A和變量B都能
找到我的座右銘。
Go語言中的指針不能進行偏移和運算,因此Go語言中的指針操作非常簡單,我們只需要記住兩個符號
& 取地址 * 根據地址取值
指針地址和指針類型
每個變量在運行時都擁有一個地址,這個地址代表變量在內存中的位置。Go語言中會用&字符放在變量
前面對變量進行 取地址操作,Go語言中的值類型 int float bool string array struct 都有對應的指針類型,
如 *int *int64 *string 等
取變量指針的語法如下
ptr := &v
其中
ptr := &v
v:代表被取地址的變量,類型爲T
ptr:用於接收地址的變量,ptr的類型就爲*T,稱作T的指針類型。*代表指針
Go 語言基礎之結構體
Go語言中沒有類的概念,也不支持 類的繼承等面向對象的概念,Go語言中通過結構體的內嵌在配合接口比面向對象
具有更高的擴展性和靈活性
類型別名和自定義類型
自定義類型
在Go語言中有一些基本的數據類型,如string, 整型 浮點型 布爾型 等數據類型,Go語言中可以使用type關鍵字來定義自定義類型。
自定義類型是定義了一個全新的類型,我們可以基於內置的基本類型定義,也可以通過struct定義。例如:
type MyInt int
通過type 關鍵字的定義,MyInt就是一種新的類型,它具有int的特性。
類型別名
類型別名是Go1.9版本添加的新功能
類型別名規定:TypeAlias只是Type的別名,本質上TypeAlias與Type是同一個類型
type TypeAlias = type
結構體
Go語言中的基本數據類型可以表示一些事物的基本屬性,但是當我們想表達一個事物的全部或部分屬性時,
這時候再用單一的基本數據類型明顯就無法滿足需求了,Go語言提供了一種自定義數據類型,可以封裝多個
基本數據類型,這種數據類型叫結構體,英文名稱struct .也就是我們可以通過struct 來定義自己的類型了
Go語言中通過struct 來實現面向對象。
結構體的定義
使用type和struct 關鍵字來定義結構體,具體代碼格式如下
type 類型名 struct {
字段名 字段類型
字段名 字段類型
}
其中:
類型名: 標識自定義結構體的名稱,在同一個包內不能重複
字段名:標識結構體字段名。結構體中的字段名必須唯一
字段類型:標識結構體字段的具體類型
方法和接受者
Go語言中的方法 Method 是一種作用於特定類型變量的函數。這種特定類型變量叫做接收者Receiver .接收者
的概念就類似於其他語言中的this 或者 self
方法的定義格式如下:
func (接收者變量 接收者類型) 方法名(參數列表)(返回參數) {
函數體
}
其中,
接收者變量:接收者中的參數變量名在命名時,官方建議使用接收者類型名稱首字母的小寫,而不是self this
之類的命名。例如 Person 類型的接收者變量應該命名爲p,Connector類型的接收者變量應該命名爲c等。
接收者類型:接收者類型和參數類似,可以是指針類型和非指針類型
方法名 參數列表 返回參數 具體格式與函數定義相同