Golang結構體多標籤

2021-10-03 12:53:58 字數 802 閱讀 7172

問題描述:結構體中定義多個標籤,用來同時滿足api層和持久層的需要。

標籤本身不再贅述:

經歷:沒直接找到相關帖子,按幾個類似帖子試了下,發現可以的。

我定義了結構體和「form」標籤,用來在iris路由中接收表單資料。

不過我用了xormplus,對資料表的對映也定義了結構體。

這兩個實現方法很類似,而且這兩個結構體有很多欄位都是一樣的。所以我期望api層和orm能共用乙個結構體。

不過我不知道二者能不能識別多標籤的結構體,沒有搜到相同問題的帖子,不過看到了這個帖子。雖然後面的結果和這裡關係不大,但至少應該明確,結構體是支援多標籤的

然後猜測了一下寫法,嘗試了一下:

filename   string `xorm:varchar(300)",form:"filename"`
func addinfo(ctx iris.context)
然後可以了,不過後來我發現了更奇怪的事情!

就是filename定義的結構體,不是我後來用到的sysfileinfo!

這個標籤根本就不影響!(當然是有影響的,看下文結果)

於是模擬,我把xorm的也刪了,果然,資料也插入成功了。

經過這裡的測試,得出的結果是,如果欄位名和form欄位一致,那麼標籤時不必要的。而且在未定義form標籤的情況下,實際傳進來的form欄位名和結構體裡的欄位名大小寫不敏感。

資料庫欄位還沒細測,因為xorm標籤裡沒有欄位名,而是字段資訊,估計標籤是用來新增表結構的。

Golang結構體知識

在看docker原始碼時,碰到了這個語句 container.lock 看到上面直接對struct container進行上鎖時,我翻了一下這個結構體,發現沒有定義任何鎖啊,怎麼上鎖的咧。於是我就翻了一下這個結構 體的一些子屬性,發現了state的定義 container container.go ...

Golang 學習 結構體

結構體定義 結構體是一種資料型別。定義型別 地位等價於 int byte bool string.通常放在全域性位置 type person struct 注意 結構體內不能賦初值,不能用 var 修飾。普通變數定義和初始化 普通變數的賦值和使用 使用 索引成員變數。var man person m...

Golang結構體初探

go語言中的基礎資料型別可以表示一些事物的基本屬性,但是當我們想表達乙個事物的全部或部分屬性時,這時候再用單一的基本資料型別明顯就無法滿足需求了,go語言提供了一種自定義資料型別,可以封裝多個基本資料型別,這種資料型別叫結構體,英文名稱struct。也就是我們可以通過struct來定義自己的型別了。...