Go 邊看邊練 -《Go 學習筆記》系列(三)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1.7 指標

支援指標類型 *T,指標的指標 **T,以及包含包名首碼的 *.T

  • 預設值 nil,沒有 NULL 常量。
  • 操作符 "&" 取變數地址,"*" 透過指標訪問目標對象。
  • 不支援指標運算,不支援 "->" 運算子,直接用 "." 訪問目標成員。

不能對指標做加減法等運算。

x := 1234p := &xp++ // Error: invalid operation: p += 1 (mismatched types *int and int)

可以在 unsafe.Pointer 和任意類型指標間進行轉換。

返回局部變數指標是安全的,編譯器會根據需要將其分配在 GC Heap 上。

func test() *int {    x := 100    return &x // 在堆上分配 x 記憶體。但在內聯時,也可能直接分配在目標棧。}

Pointer 轉換成 uintptr,可變相實現指標運算。

注意:GC 把 uintptr 當成普通整數對象,它無法阻止 "關聯" 對象被回收。

1.8 自訂類型

可將類型分為命名和未命名兩大類。命名類型包括 boolintstring 等,而 arrayslicemap 等和具體元素類型、長度等有關,屬於未命名類型。

具有相同聲明的未命名類型被視為同一類型。

  • 具有相同基底類型的指標。
  • 具有相同元素類型和長度的 array
  • 具有相同元素類型的 slice
  • 具有相同索引值類型的 map
  • 具有相同元素類型和傳送方向的 channel
  • 具有相同欄位序列 (欄位名、類型、標籤、順序) 的匿名 struct
  • 簽名相同 (參數和傳回值,不包括參數名稱) 的 function
  • 方法集相同 (方法名、方法簽名相同,和次序無關) 的 interface

例如,

var a struct { x int \`a\` }var b struct { x int \`ab\` }// cannot use a (type struct { x int "a" }) as type struct { x int "ab" } in assignmentb = a

可用 type 在全域或函數內定義新類型。

func main() {    type bigint int64    var x bigint = 100    println(x)}

新類型不是原類型的別名,除擁有相同資料存放區結構外,它們之間沒有任何關係,不會持有原類型任何資訊。除非目標類型是未命名類型,否則必須顯式轉換。

x := 1234var b bigint = bigint(x) // 必須顯式轉換,除非是常量。var b2 int64 = int64(b)var s myslice = []int{1, 2, 3} // 未命名類型,隱式轉換。var s2 []int = s

下一篇: Go 邊看邊練 -《Go 學習筆記》系列(四)

  • 本系列是基於雨痕《Go 學習筆記》(第四版)整理彙編而成,非常感謝雨痕的辛勤付出與分享!
  • 轉載請註明:文章轉載自:駭客與畫家的社區 [http://symphony.b3log.org]
  • 如果你覺得本章節做得不錯,請在下面打賞一下吧~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.