Éditeur PHP Apple vous propose une introduction sur la façon d'utiliser le contexte dans le langage Go. Dans le développement du langage Go, le contexte est un concept très important, qui peut transmettre les informations demandées entre plusieurs goroutines. Cet article présentera en détail le rôle du contexte, les scénarios d'utilisation et comment utiliser le contexte dans le langage Go. Que vous soyez débutant ou développeur expérimenté, en lisant cet article, vous pourrez mieux comprendre et appliquer l'importance du contexte dans le développement du langage Go.
J'essaie de télécharger des images du backend Golang vers imagekit via le SDK imagekit. J'ai du mal à comprendre le but de l'API contextuelle.
Actuellement, je n'utilise pas vraiment le contexte sur le backend mais je transmets toutes les dépendances dans le constructeur.
J'ai rencontré une exception :
2023/01/04 09:53:56 http: panic serving 127.0.0.1:50780: runtime error: invalid memory address or nil pointer dereference goroutine 20 [running]: net/http.(*conn).serve.func1() /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:1850 +0xbf panic({0x1005836c0, 0x10092b820}) /usr/local/cellar/go/1.19.3/libexec/src/runtime/panic.go:890 +0x262 github.com/bolzfieber/bolzfieber-backend/internal/controllers.pitchescontroller.createandupdatepitch({0xc0001f7530?, 0x0?}, {0x1006a94e8, 0xc0000ca000}, 0xc0000d4000) /users/pbahr/dev/bolzfieber/be/bolzfieber-backend/internal/controllers/pitches.go:91 +0x5ae net/http.handlerfunc.servehttp(0x100580980?, {0x1006a94e8?, 0xc0000ca000?}, 0xc0000be048?) /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:2109 +0x2f github.com/go-chi/chi/v5.(*mux).routehttp(0xc00007c600, {0x1006a94e8, 0xc0000ca000}, 0xc0000d4000) /users/pbahr/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:442 +0x216 net/http.handlerfunc.servehttp(0xc0000b00c0?, {0x1006a94e8?, 0xc0000ca000?}, 0xc00011b918?) /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:2109 +0x2f github.com/go-chi/chi/v5.(*mux).servehttp(0xc00007c600, {0x1006a94e8, 0xc0000ca000}, 0xc0000d4000) /users/pbahr/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x355 github.com/go-chi/chi/v5.(*mux).mount.func1({0x1006a94e8, 0xc0000ca000}, 0xc0000d4000) /users/pbahr/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:314 +0x19c net/http.handlerfunc.servehttp(0x100580980?, {0x1006a94e8?, 0xc0000ca000?}, 0xc0000aa005?) /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:2109 +0x2f github.com/go-chi/chi/v5.(*mux).routehttp(0xc00007c420, {0x1006a94e8, 0xc0000ca000}, 0xc0000d4000) /users/pbahr/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:442 +0x216 net/http.handlerfunc.servehttp(0x1006a9bf8?, {0x1006a94e8?, 0xc0000ca000?}, 0x10092b640?) /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:2109 +0x2f github.com/go-chi/chi/v5.(*mux).servehttp(0xc00007c420, {0x1006a94e8, 0xc0000ca000}, 0xc000332000) /users/pbahr/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x310 net/http.serverhandler.servehttp({0x1006a84d0?}, {0x1006a94e8, 0xc0000ca000}, 0xc000332000) /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:2947 +0x30c net/http.(*conn).serve(0xc00032c000, {0x1006a9ca0, 0xc000318270}) /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:1991 +0x607 created by net/http.(*server).serve /usr/local/cellar/go/1.19.3/libexec/src/net/http/server.go:3102 +0x4db
Et la ligne 91 est la ligne de téléchargement d'imagekit. Je pense donc que le pointeur nul est le contexte.
Mon approche actuelle est la suivante :
func (c PitchesController) CreateAndUpdatePitch(w http.ResponseWriter, r *http.Request) { var pitchUpload models.PitchUpload err := json.NewDecoder(r.Body).Decode(&pitchUpload) if err != nil { fmt.Printf("Error: %v\n", err) utils.RespondWithError(w, http.StatusBadRequest, "Bad request") return } var pitch = models.Pitch{ Name: pitchUpload.Name, Address: pitchUpload.Address, Author: pitchUpload.Author, PitchType: pitchUpload.PitchType, PitchSize: pitchUpload.PitchSize, GoalSize: pitchUpload.GoalSize, GoalType: pitchUpload.GoalType, LocationScopeId: pitchUpload.LocationScopeId, Coordinates: pitchUpload.Coordinates, Rating: pitchUpload.Rating, } for i, image := range pitchUpload.Images { fmt.Printf("pitch: %v\n", pitchUpload.Name) response, uploadErr := c.Ik.Uploader.Upload(r.Context(), image, uploader.UploadParam{ FileName: pitchUpload.Name + "_" + string(rune(i)), UseUniqueFileName: newTrue(), Tags: "pitch", Folder: "/pitches/" + pitchUpload.Name, }) if uploadErr != nil { fmt.Printf("Error: %v\n", uploadErr) utils.RespondWithError(w, http.StatusBadRequest, "Bad request") return } pitch.Images = append(pitch.Images, models.PitchImage{FileUrl: response.Data.Url}) } c.Db.Save(&pitch) utils.RespondWithJSON(w, http.StatusCreated, "Created successfully") }
Les étapes suivantes s'appliquent :
Obtenir un pointeur nul dans cette ligne signifie probablement c.Ik. ou c.Ik.Uploader. ou une rivière. ou téléchargeur. est zéro. Nous pouvons facilement éliminer certains suspects.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!