簡體   English   中英

Golang:接口內的struct?

[英]Golang: struct inside an interface?

所以我在包service有一個名為UserService的接口

我有兩個簡單的結構代表HTTP調用的主體和響應。 我還有另一個實現UserService接口的結構。

我想放置這些結構,在接口內部將它們UserResponseUserRequest ,以便其他服務可以使用它們進行HTTP調用。 此外,請求和響應應該可用( struct UserReponse ,而不是struct userResponse ),以便代碼的其他部分可以使用它們。

我在名為GetUser(request UserRequest) UserResponse的接口中定義一個函數

但是,每當我引用UserRequest ,都必須使用service.UserRequest而不是service.UserService.UserRequest 這很糟糕,因為我不希望將與用戶相關的對象放入服務名稱空間。 我希望將每個服務相關的數據組織在其自己的接口,文件等下。不幸的是,如果將UserResponse放在UserService接口內,則會出現錯誤。 因此,我將其與UserService放在同一級別,這就是為什么它們顯示為service.UserResponse 如何將UserResponse作為service.UserService.UserResponse訪問?

這是一種建議,以“慣用的” Go方式組織代碼:

package user

type Request struct {
    ...
}

type Response struct {
    ...
}

type Service interface {
   GetUser(r Request) Response
}

user包之外,代碼如下所示:

s := user.NewService()
var req user.Request
var resp user.Response
resp = s.GetUser(req)

如您所見,該代碼使用了短得多的名稱,並且仍然非常可讀。

包名稱(例如service表明,您可以按層而不是按功能組織應用中的代碼。 我不推薦它。 這是一篇有趣的文章: http : //www.javapractices.com/topic/TopicAction.do?Id=205 它使用Java,但原理適用於任何編程語言。

Go不是Java。 Go甚至不是C ++。 您應該將Go視為“帶有接口的C”。

特別是,您無法按需進行操作,因為無法在接口定義中嵌套結構定義。 請注意,您可以在struct內部嵌套結構 ,但不能直接實例化嵌套的結構。

最能做的是將每個邏輯對象組移動到其自己的程序包中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM