golang 方法及struct的匿名字段方法繼承

2021-09-27 04:26:24 字數 1170 閱讀 6731

/*

go方法

一般的函式定義叫做函式

定義在結構提上面的函式叫做該結構體的方法

*/package main

import (

"fmt"

)type rect struct

/*這個area方法有乙個限定型別*rect

表示這個函式是定義在rect結構體上的方法

*/func (r *rect) area() int

/*方法的定義限定型別可以為結構體型別

也可以是結構體指標型別

區別在於如果限定型別是結構體指標型別

那麼在該方法內部可以修改結構體成員資訊

*/func (r *rect) perim() int

func main()

r.area()

r.perim()

/*go語言會自動識別方法呼叫的引數是結構體變數還是結構體指標

如果要修改結構體內部成員值那麼使用結構體指標作為限定型別

也就是說引數若是結構體變數僅僅會發生值拷貝

*/rp := &r

rp.area()

rp.perim()}/*

方法是函式的語法糖

當函式與某個特定的型別繫結那麼他就是乙個方法

我們可以將方法還原成函式

*/func main()

p.test()

var f1 func(int) = p.test

f1(2)

person.test(p, 3)

var f2 func(person, int) = person.test

f2(p, 4)

}type person struct

func (p *person) test(x int)

/*使用匿名欄位時 實現模擬繼承

即可以直接訪問匿名欄位的方法

有隱藏規則

*/func main() , 25}

p.test()

}type person struct

/*知識點:

struct 的匿名字段

匿名欄位的方法會被繼承

*/type student struct

func (p *person) test()

func (s *student) test()

golang筆記 struct體遍歷

由於文章由markdown的方式編寫,部分鏈結與顯示可能存在問題,大家可以移步到github源檢視 文章由啟發,進行展開發散.利用reflect包對struct結構進行遍歷,對於學習golang有很大的幫助 完整測試 如下,可以用以輸出完整的struct成員,增加遞迴函式可以很容易的做到多種型別輸出...

Golang中的struct比較

可比較的資料型別除了上述三種外,還有boolean,complex,pointer,channel,inte ce和array 不可比較的資料型別包括,slice,map,和function 不包含不可比較的成員變數 reflect.deepequal函式,指標和例項均可以比較 無論有沒有包含不可比...

Golang 入門 結構體 struct

go 通過型別別名 alias types 和結構體的形式支援使用者自定義型別,或者叫定製型別。試圖表示乙個現實世界中的實體。結構體由一系列命名的元素組成,這些元素又被稱為字段,每個欄位都有乙個名稱和乙個型別。結構體的目的就是把資料聚集在一起,以便能夠更加便捷地操作這些資料。結構體的概念在 c 語言...