2015-09-09 66 views
-2

所以我一直在嘗試使用中間件修改golang中的請求結構,我試圖創建一個自定義結構並嵌入請求對象和一些更多的數據,但是我不能鍵入assert it * * http.Request,任何人都可以請幫助,提前致謝。如何修改golang請求對象?

編輯:所以這裏是我的結構是什麼樣子

type CustomRequest struct { 
    *http.Request 
    *profile.User // This is the data i want to embed into the request 
} 

// then my middlware will be something like 

func Middleware(next http.HandlerFunc) http.HandlerFunc { 
    return http.HandleFunc(func (w http.ResponseWriter, r *http.Request)) { 
     user := &User{ 
     // User Details Are Here 
     } 

     customRequest := &CustomRequest{ 
      r, 
      &user, 
     } 

     req := customRequest.(*http.Request) 

     next.ServeHttp(w, req) 
} 
+0

請向我們展示您的代碼(嵌入式結構)。 – icza

+0

您應該能夠直接修改'* http.Request',這些字段被導出。 – user3591723

+0

請輸入哪條線和錯誤信息。 –

回答

1

這並不是多麼type assertion作品。

對於X接口類型的表達式和類型T,主 表達

X(T)聲稱,x是不是nil和存儲在x中的值是 類型T的符號x。(T)被稱爲類型斷言。

您鍵入assert接口到它們的基礎類型。

你不能鍵入斷言一種類型到另一種,那將是type conversion,但在這種情況下,你不能在兩者之間進行轉換。您只能根據上述規範中的說明轉換兩種可兌換的類型。

如果要修改*http.Request只需直接進行,則會導出這些字段。如果您希望請求保存額外的數據,只需將其作爲JSON或在網址中寫入請求正文。

編輯:爲了傳遞數據你也可以use a context,但我不知道你在做什麼。還有github.com/gorilla/context