本文目錄一覽:
golang 查看結構體是否有某個屬性
package main
import (
“reflect”
)
type User struct {
ID int
Name string
}
func main() {
user := User{}
t := reflect.TypeOf(user)
if _, ok := t.FieldByName(“Name”); ok {
println(“存在”)
} else {
println(“不存在”)
}
}
golang變相實現抽象類
golang里的struct只能有屬性, interface只能有方法定義。這點在java里很好實現的abstract class在這裡就不能直接實現, 可以通過struct和interface的結合定義,實現抽象類的類似的功能。
直接上代碼:
代碼都來之與項目
GitHub – golang fot xxl-job executor
在這個項目里,重構了executor和默認的RestfulExecutor的實現方式, 就是採用了上述的方式。
先定義接口
然後定義我們需要的抽象類
實現抽象類里的主要方法
子類實現
最關鍵的地方,調用
具體代碼可以查看項目中的源碼
項目地址
GitHub – gohutool/boot4go-xxljob-executor: golang fot xxl-job executor
推薦幾個好工具
golang中級進階(二):結構體
目錄
一、結構體詳解
1. 結構體定義
2. 實例化結構體的7種方法
二、結構體方法
1. 結構體的方法定義
2. 結構體內自定義方法的引用
3. 任意類型添加方法
三、嵌套、繼承
1. 匿名結構體
2. 結構體中可以定義任意類型的字段
3. 結構體嵌套結構體
4. 結構體嵌套匿名結構體
5. 結構體嵌套多個匿名結構體
6. 結構體繼承
四、結構體和JSON相互轉換
1. 結構體轉化成json
2. json轉化成結構體
3. 結構體標籤 tag
4. 嵌套結構體和json的序列化反序列化
Golang 中沒有“類”的概念,Golang 中的結構體和其他語言中的類有點相似。和其他面向對 象語言中的類相比,Golang 中的結構體具有更高的擴展性和靈活性。
Golang 中的基礎數據類型可以表示一些事物的基本屬性,但是當我們想表達一個事物的全 部或部分屬性時,這時候再用單一的基本數據類型就無法滿足需求了,Golang 提供了一種 自定義數據類型,可以封裝多個基本數據類型,這種數據類型叫結構體,英文名稱 struct。 也就是我們可以通過 struct 來定義自己的類型了。
使用 type 和 struct 關鍵字來定義結構體,具體代碼格式如下:
type 類型名 struct {
字段名 字段類型
字段名 字段類型 …
}
其中:
• 類型名:表示自定義結構體的名稱,在同一個包內不能重複。
• 字段名:表示結構體字段名。結構體中的字段名必須唯一。
• 字段類型:表示結構體字段的具體類型。
在 go 語言中,沒有類的概念但是可以給類型(結構體,自定義類型)定義方法。所謂方法 就是定義了接收者的函數。接收者的概念就類似於其他語言中的 this 或者 self。
方法的定義格式如下:
func (接收者變量 接收者類型) 方法名(參數列表) (返回參數) {
函數體
}
注意:想改變結構體內的值,必須先變成指針。
在 Go 語言中,接收者的類型可以是任何類型,不僅僅是結構體,任何類型都可以擁有方法。 舉個例子,我們基於內置的 int 類型使用 type 關鍵字可以定義新的自定義類型,然後為我們 的自定義類型添加方法。
注意:匿名結構體中不允許出現多個重複的類型
注意:如果結構體裡面有私有屬性也就是小寫定義的字段,則不會被json使用
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193882.html