[英]Golang: struct inside an interface?
所以我在包service
有一個名為UserService
的接口
我有兩個簡單的結構代表HTTP調用的主體和響應。 我還有另一個實現UserService
接口的結構。
我想放置這些結構,在接口內部將它們UserResponse
和UserRequest
,以便其他服務可以使用它們進行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,但原理適用於任何編程語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.