Heim >häufiges Problem >Zwei effiziente Tipps in der Go-Sprache
Dieser Artikel gibt Ihnen zwei effiziente Tipps in der Go-Sprache: Der eine besteht darin, nicht + und fmt.Sprintf zum Betreiben von Zeichenfolgen zu verwenden. Der andere besteht darin, temporäre Strukturen für Schlüssel-Wert-Paare fester Felder zu verwenden ]Schnittstelle{}.
+ ist sehr praktisch, um Strings zu bedienen, aber die Verwendung von + in der Go-Sprache führt dazu, dass Ihr Programm ausgeführt wird schneller Es ist möglicherweise besser als eine Skriptsprache, Sie können einen Test selbst durchführen und 100.000 Mal iterieren. Python und Javascript sind viel schneller als Go.
func TestStr(t *testing.T) { str := "" for i := 0; i < 100000; i++ { str += "test" } }
Testergebnis
PASS: TestStr (3,32s)
str="" for i in range(100000): str+="test"
Testergebnis:
~/» Zeit python test.py 1 % CPU 0,078 insgesamtAls statische Sprache ist die Ausführungseffizienz von Go für einen so einfachen Code 100-mal langsamer als die von Python. Ist das nicht unglaublich? Es ist kein Go-Problem, aber die Verwendung von + zum Verarbeiten von Zeichenfolgen in Go ist sehr leistungsintensiv, und Python hätte die Optimierung der +-Operationszeichenfolge überlasten müssen. (Javascript + Betriebszeichenfolgen sind ebenfalls schnell) Verwandte Tutorials:
strBuf := bytes.NewBufferString("") for i := 0; i < 100000; i++ { strBuf.WriteString("test") }
func TestStr(t *testing.T) { a, b := "Hello", "world" for i := 0; i < 1000000; i++ { fmt.Sprintf("%s%s", a, b) //strings.Join([]string{a, b}, "") } }PASS: TestStr (0,29s)
PASS: TestStr (0,09 s)Den Ergebnissen nach zu urteilen, ist strings.Join etwa viermal schneller als die Verwendung von Sprint. 2. Für Schlüssel-Wert-Paare fester Felder verwenden Sie temporäres Struct anstelle von map[string]interface{}Geben Sie ein einfaches Beispielfunc TestStr(t *testing.T) { a, b := "Hello", "world" for i := 0; i < 1000000; i++ { //fmt.Sprintf("%s%s", a, b) strings.Join([]string{a, b}, "") } }
func TestData(t *testing.T) { for i := 0; i < 100000000; i++ { var a struct { Name string Age int } a.Name = "Hello" a.Age = 10 } }PASS: TestData ( 0,04s)
PASS: TestData2 (38,30s)Die Effizienz ist tausendmal anders!func TestData2(t *testing.T) { for i := 0; i < 100000000; i++ { var a = map[string]interface{}{} a["Name"] = "Hello" a["Age"] = 10 } }
Wenn die Felder bekannt sind, erfordert die Verwendung temporärer Strukturen keine dynamische Zuweisung von Inhalten während der Laufzeit und es besteht keine Notwendigkeit, den Index wie bei einer Karte zu überprüfen, sodass die Geschwindigkeit viel schneller ist.
Das obige ist der detaillierte Inhalt vonZwei effiziente Tipps in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!