Ich verwende Go und Gin, um meine Website einzurichten und möchte die Datenbankzugriffszeit kennen. Ich verwende Goroutine, also wenn ich nicht so etwas wie Thread-Local verwende, muss ich fast jede Funktion ändern, um es zu tun. Hat Go einen guten Weg es zu tun?Hat Go etwas wie ThreadLocal von Java?
Antwort
Die Go-Runtime- und Standardbibliotheken bieten keinen lokalen Gorlotinespeicher oder einen Goroutiny-Bezeichner, der zum Implementieren lokaler Goroutinhaltsspeicher verwendet werden kann.
Die dritte Partei gls Paket implementiert Gorilla Routine lokalen Speicher auf eine interessante Weise. Manche finden dieses Paket erschreckend und andere finden es clever.
Das Go-Team empfiehlt, den Kontext explizit als Funktionsargument zu übergeben, anstatt lokalen Gorocutine-Speicher zu verwenden. Weitere Informationen finden Sie unter context blog post und package documentation.
Ich finde GLS, aber ich muss noch Code mit ihm ändern. Es scheint, dass es keinen Weg gibt, dies zu tun, ohne meine Funktion zu ändern. – modkzs
Es hat keine thread-local. Eine Alternative besteht darin, einen pro-Anfrage-Kontext umzuleiten; [Gorilla] (http://www.gorillatoolkit.org/pkg/context) und [Google App Engine] (https://cloud.google.com/appengine/docs/go/reference#Context) haben es. Und ja, Sie können am Ende müssen es durch eine Menge von Funktionen übergeben. – twotwotwo