如何實作 Go 框架開發的常見問題:依賴注入: 使用結構體作為控制器,並在其建構函式中註入相依性。錯誤處理: 在處理程序中檢查錯誤,並使用 http.Error 回應內部伺服器錯誤。單元測試: 撰寫模擬服務並使用斷言函式庫來驗證處理程序的行為。應用程式部署:Kubernetes:容器化應用程式並部署到叢集。 Docker:打包為映像並部署到主機或叢集。 Heroku:使用託管雲端平台部署應用程式。
Go 框架開發實戰手冊:常見問題解答
問題 1:如何實作依賴注入?
type UserHandler struct { userService UserService } func NewUserHandler(userService UserService) *UserHandler { return &UserHandler{userService: userService} }
問題 2:如何處理錯誤?
func GetUserDetails(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) userID := params["id"] user, err := userService.GetUser(userID) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } renderJSON(w, user) }
問題 3:如何進行單元測試?
import ( "testing" "github.com/stretchr/testify/assert" ) func TestGetUserHandler(t *testing.T) { // 创建一个模拟的 UserService userService := &MockUserService{} // 设置模拟行为 userService.On("GetUser").Return(user, nil) // 创建一个 UserHandler handler := NewUserHandler(userService) // 创建一个请求对象 req, err := http.NewRequest("GET", "/users/1", nil) assert.Nil(t, err) // 创建一个响应记录器 w := httptest.NewRecorder() // 调用处理程序 handler.GetUserDetails(w, req) // 断言响应代码 assert.Equal(t, http.StatusOK, w.Code) // 断言响应体 respBody, err := ioutil.ReadAll(w.Body) assert.Nil(t, err) assert.JSONEq(t, string(respBody), `{ "id": 1 }`) }
問題 4:如何部署 Go 應用程式?
以上是golang框架開發實戰手冊:常見問題解答的詳細內容。更多資訊請關注PHP中文網其他相關文章!