Uso Go e Gin per configurare il mio sito Web e desidero conoscere il tempo di accesso al database. Io uso goroutine quindi se non usi qualcosa come thread-local, devo cambiare quasi ogni funzione per farlo. Go ha un buon modo per farlo?Go ha qualcosa come ThreadLocal da Java?
risposta
Il runtime Go e le librerie standard non forniscono la memoria locale di goroutine o un identificatore di goroutine che può essere utilizzato per implementare la memorizzazione locale di goroutine.
Il pacchetto di terze parti gls implementa in modo interessante l'archiviazione locale di goroutine. Alcuni trovano questo pacchetto orribile e altri pensano che sia intelligente.
Il team di Go consiglia di passare esplicitamente il contesto come argomento di funzione invece di utilizzare la memoria locale di goroutine. Vedere lo context blog post e package documentation per ulteriori informazioni.
Ho trovato gls, ma ho ancora bisogno di cambiare il codice con esso. Sembra che non ci sia modo di farlo senza cambiare la mia funzione. – modkzs
Non ha thread-local. Un'alternativa è passare un contesto per richiesta; [Gorilla] (http://www.gorillatoolkit.org/pkg/context) e [Google App Engine] (https://cloud.google.com/appengine/docs/go/reference#Context) ce l'hanno. E sì, si può finire per aver bisogno di passare attraverso un sacco di funzioni. – twotwotwo