(文章持續更新中...有志同道合的人能夠一塊兒探討下。整個系列(1~8)準備重寫,不過都是很基礎的入門筆記,想學到很深刻的東西則不建議閱讀...)bash
Go 語言使用結構體和結構體成員來描述真實世界的實體和實體對應的各類屬性。能夠類比爲「類」數據結構
Go 語言中沒有「類」的概念,也不支持「類」的繼承等面向對象的概念。佈局
結構體就是數據結構一種表現方式,可嵌套ui
// 結構體的定義
type 類型名 struct {
字段1 字段1類型
字段2 字段2類型
…
}
type Point struct {
X int
Y int
}
複製代碼
結構體的定義只是一種內存佈局的描述,只有當結構體實例化時,纔會真正地分配內存。所以必須在定義結構體並實例化後才能使用結構體的字段spa
// 基本實例化格式
var ins T
type Point struct {
X int
Y int
}
var p Point
p.X = 10
p.Y = 20
// Go 語言中,還可使用 new 關鍵字對類型(包括結構體、整型、浮點數、字符串等)進行實例化,結構體在實例化後會造成指針類型的結構體。
ins := new(T)
Go 語言中,對結構體進行&取地址操做時,視爲對該類型進行一次 new 的實例化操做
ins := &T{}
Go 語言中,訪問結構體指針的成員變量時能夠繼續使用.操做符。 C/C++ 語言中,使用 new 實例化類型後,訪問其成員變量時必須使用->操做符
複製代碼
Go語言爲任意類型添加方法指針
// 爲基本類型添加方法
package main
import (
"fmt"
)
// 將int定義爲MyInt類型
type MyInt int
// 爲MyInt添加IsZero()方法
func (m MyInt) IsZero() bool {
return m == 0
}
// 爲MyInt添加Add()方法
func (m MyInt) Add(other int) int {
return other + int(m)
}
func main() {
var b MyInt
fmt.Println(b.IsZero())
b = 1
fmt.Println(b.Add(2))
}
複製代碼