PHP-Editor Apple bietet Ihnen eine Einführung in die Verwendung von Kontext in der Go-Sprache. Bei der Go-Sprachentwicklung ist der Kontext ein sehr wichtiges Konzept, das angeforderte Informationen zwischen mehreren Goroutinen weitergeben kann. In diesem Artikel werden die Rolle des Kontexts, Nutzungsszenarien und die Verwendung des Kontexts in der Go-Sprache ausführlich vorgestellt. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, werden Sie durch die Lektüre dieses Artikels in der Lage sein, die Bedeutung des Kontexts bei der Go-Sprachentwicklung besser zu verstehen und anzuwenden.
Ich versuche, ein Bild vom Golang-Backend über Imagekit SDK in Imagekit hochzuladen. Ich habe Probleme, den Zweck der Kontext-API zu verstehen.
Derzeit verwende ich nicht wirklich den Kontext im Backend, sondern übergebe alle Abhängigkeiten im Konstruktor.
Ich bin auf eine Ausnahme gestoßen:
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
Und Zeile 91 ist die Upload-Zeile von Imagekit. Ich denke also, dass der Nullzeiger der Kontext ist.
Mein aktueller Ansatz ist wie folgt:
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") }
Es gelten folgende Schritte:
Einen Null-Zeiger in dieser Zeile zu bekommen bedeutet wahrscheinlich c.Ik. oder c.Ik.Uploader. oder Fluss. oder Uploader. ist Null. Einige Verdächtige können wir problemlos ausschalten.
Das obige ist der detaillierte Inhalt vonImagekit - Go Language |. So verwenden Sie den Kontext. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!