DBus中也是類似於靜態語言,使用了“強型別”資料格式。在DBus上傳遞的所有資料都需要宣告其對應的型別,下面整理了下,DBus中的資料型別,以及在DBus中宣告的資料型別是什麼意思。

dbus型別 說明
s string 字串型別,可以宣告 s:
a array 陣列,可以宣告為 a:
v variant,任意型別,類似於interface
() 結構體,宣告時為雙括號中間的為型別,可以是多個,例如(ss) 即這個結構體內包含兩個字串屬性
b 布林值
SIGNATURE signature型別
y BYTE
d DOUBLE
t UINT64
x INT64
u UINT32
i INT32
q uint16
n INT16
{} 詞典,這裡宣告為兩個括號,中間為其對應的 key value,例如 {sv} 即 key是字串型別,value是variant型別。
o OBJECT_PATH 物件路徑

a{sv} : 是一個數組,為 一個鍵值對的詞典,裡面僅有一個

(ssssa{ss}as) 為一個結構體, 裡面屬性有7個 兩個詞典(陣列),五個字串型別

(sssbsasa(ss)asba(ssss)asasasasa(ss)b) 這個型別拆開為下:共16個屬性

(
s string
s string
s string
b bool
s string
as array only one string
a(ss) two string type in the array
as array only one string
b bool
a(ssss) four string type in the array
as array only one string
as array only one string
as array only one string
as array only one string
a(ss) two string type in the array
b bool
)

ao: array,裡面元素僅為一個object_path

golang 中宣告一個 Variant

在go中看到variant型別如下

type Variant struct {
sig Signature
value interface{}
}

可以通過 SignatureOf("short")宣告一個 Signature

然後在通過:MakeVariantWithSignature(v interface{}, s Signature) Variant 宣告 對應的 Variant


注:其他資料型別與golang自己的資料型別一致,陣列可以使用slice(類似php,python直接用陣列替代即可更靈活)


More Reference

dbus data type

dbus data type conparision perl