本文目錄一覽:
如何在golang使用自定義的包
例如你自定義的包在 %GOPATH%\custom\mypkg 你的包名也應該聲明為 package mypkg 在其它包中 import “custom/mypkg”
Golang中的自定義json序列化
後端開發人員跟前端對接接口的時候,或多或少都會面臨一些溝通問題,比如說枚舉字符的定義,比如有整形狀態字段: state
通常給前端的時候,前段要做的是將1,2,3以及對應的中文釋義存儲為key/value的形式,key與value單看都無法知道對方的語義,
比如我只知道狀態值為「1」, 是無法將其與「成功」對應起來的(當然這套狀態的設計者肯定是知道的),後端通常給到前端的restful api
接口定義也是key/value的形式,這乍一看其實也沒啥毛病,只要有key/value也沒問題,後端定義通常會是
但數字的表現形式終歸是不不太明確的,如果對狀態的定義換成以下形式:
基本可以理解為中英文互譯了,理解起來也會更清晰一些不是,如果這麼做的話,後端給到前端的響應字段狀態的類型就需要修改成字符器格式
後端還是要做一層字符串到整型的轉換,從目的來講,我們只是想返給前端的 state 字段是字符串而已,也就是在做json序列化的時候將整型與字符串做一層轉換,有更優雅的做法如下所示
只需要做兩件事,自定義類型 MyState ,實現 MarshalJSON 方法
只要類型實現了 MarshalJSON 方法,在json序列化時就會調用此方法,如此一來,我們就輕鬆實現了自定義json序列化,反序列化同樣如此
實現起來也很簡單
需要注意的是, UnmarshalJSON 方法操作過程需要給 receiver 也就是 u 賦值,所以必須是指針類型,同樣的,在實現
MarshalJSON 方法, receiver 的類型需要與結構體定義中的類型保持一致,否則自定義序列化會失敗
參考:
golang中自定義包
golang中默認以文件夾名作為包名,導入的文件的路徑為$GOPATH/src
例如我們在 $GOPATH/src下面建立一個gopackage的一個文件夾,下面建立一個abc.go的文件,文件內容如下
則我們在包外部使用gopackage包中的函數時,導入格式是這樣的:
我們在abc.go文件中需要導出的函數的首字母都是大寫的,這是因為 只有首字母大寫的標識符才可以導出 ,mutiply(int,int)int函數不可以被導出,編譯失敗。
當我們使用多個自定義包時如果發生衝突,怎麼辦呢,我們可以給不同的包提供不同的別名
如果abc.go文件中包名不是文件夾的名字,如
則在外部導入是,golang會自動為該包提供別名
知識分享之Golang——使用gorm時進行執行自定義SQL的幾種方式
知識分享之Golang篇是我在日常使用Golang時學習到的各種各樣的知識的記錄,將其整理出來以文章的形式分享給大家,來進行共同學習。歡迎大家進行持續關注。
知識分享系列目前包含Java、Golang、Linux、Docker等等。
近期一直在使用gorm進行數據的增刪改查操作,對於一些單表或關係表來講使用起來比較方便,但是有時我們可能需要一些特定的長SQL,這時就需要使用到自定義SQL了,本節我對其進行整理出來一些常用的實現方式:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/280351.html