03Go指針

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等。

接收者類型:接收者類型和參數類似,可以是指針類型和非指針類型

方法名 參數列表 返回參數 具體格式與函數定義相同

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章