老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

go語言的項目結構 go語言模塊

聊聊golang的DDD項目結構

本文主要研究一下golang的DDD項目結構

創新互聯主要從事成都網站制作、做網站、網頁設計、企業做網站、公司建網站等業務。立足成都服務錯那,10余年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:13518219792

food-app-server/interfaces

food-app-server/application

food-app-server/domain

food-app-server/infrastructure

DDD一般分為interfaces、application、domain、infrastructure這幾層;其中domain層不依賴其他層,它定義repository接口,infrastructure層會實現;application層會調用domain、infrastructure層;interfaces層一般調用application層或者infrastructure層。

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使用

講講go語言的結構體

作為C語言家族的一員,go和c一樣也支持結構體。可以類比于java的一個POJO。

在學習定義結構體之前,先學習下定義一個新類型。

新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。

這里要引入一個底層類型的概念。

如果一個新類型是基于某個 Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型

在上面的例子中,int就是T1的底層類型。

但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int

底層類型是很重要的,因為對兩個變量進行顯式的類型轉換,只有底層類型相同的變量間才能相互轉換。底層類型是判斷兩個類型本質上是否相同的根本。

這種類型定義方式通常用在 項目的漸進式重構,還有對已有包的二次封裝方面

類型別名表示新類型和原類型完全等價,實際上就是同一種類型。只不過名字不同而已。

一般我們都是定義一個有名的結構體。

字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。

還有一個點提一下

如果換行來寫

Age: 66,后面這個都好不能省略

還有一個點,觀察e3的賦值

new返回的是一個指針。然后指針可以直接點號賦值。這說明go默認進行了取值操作

e3.Age 等價于 (*e3).Age

如上定義了一個空的結構體Empty。打印了元素e的內存大小是0。

有什么用呢?

基于空結構體類型內存零開銷這樣的特性,我們在日常 Go 開發中會經常使用空 結構體類型元素,作為一種“事件”信息進行 Goroutine 之間的通信

這種以空結構體為元素類建立的 channel,是目前能實現的、內存占用最小的 Goroutine 間通信方式。

這種形式需要說的是幾個語法糖。

語法糖1:

對于結構體字段,可以省略字段名,只寫結構體名。默認字段名就是結構體名

這種方式稱為 嵌入字段

語法糖2:

如果是以嵌入字段形式寫的結構體

可以省略嵌入的Reader字段,而直接訪問ReaderName

此時book是一個各個屬性全是對應類型零值的一個實例。不是nil。這種情況在Go中稱為零值可用。不像java會導致npe

結構體定義時可以在字段后面追加標簽說明。

tag的格式為反單引號

tag的作用是可以使用[反射]來檢視字段的標簽信息。

具體的作用還要看使用的場景。

比如這里的tag是為了幫助 encoding/json 標準包在解析對象時可以利用的規則。比如omitempty表示該字段沒有值就不打印出來。


分享標題:go語言的項目結構 go語言模塊
網站鏈接:http://www.xueling.net.cn/article/ddgoocp.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: yellow在线观看免费观看大全 | 精品久久久久久中文字幕一区二区 | 国产精品入口传媒小说 | 精品无人区卡卡卡卡卡二卡三乱码 | 久久夜色精品国产欧美 | 无码少妇一区二区三区av | 在线观看国产黄 | 狠狠色综合TV久久久久久 | 国产综合久久99久久 | 亚洲国产福利成人一区 | 欧亚乱熟女一区二区在线 | 国产思思99re99在线观看 | 日韩美国1级大片 | 被男人嗦过奶头一下就变大了 | 91精品视频一区 | 内射少妇36P九色 | av黄色一级 | 交换娇妻呻吟hd中文字幕 | 国产精品一区二区x88av | 日韩人妻毛片 | 亚洲色av天天天天天天 | 人人爱人人干婷婷丁香亚洲 | 熟妇人妻va精品中文字幕 | 日韩在线视频网 | 99久久一区二区 | 欧美专区亚洲 | 久久精品99久久香蕉国产色戒 | 色先锋aa成人 | 国产精品入口 | 少妇高潮惨叫正在播放对白 | 三级小说欧洲区亚洲区 | 国产精品亚洲成人 | 韩国无码AV片在线观看网站 | 日韩国产精品亚洲а∨天堂免 | 69日本xxxxxxxxx49 国产日本欧洲亚洲 | 午夜a级毛片免费观看 | 老司机午夜视频在线观看 | 久久三级影院 | 999精品无码a片在线1级 | 91av久久久 | 国产情侣一区二区三区 |