Was ist der effizienteste Weg, ein Array in Golang zu drucken?

王林
Freigeben: 2024-02-10 09:30:23
nach vorne
640 Leute haben es durchsucht

Was ist der effizienteste Weg, ein Array in Golang zu drucken?

In Golang ist die effizienteste Möglichkeit zum Drucken eines Arrays die Verwendung der Println-Funktion im fmt-Paket. Durch die Übergabe eines Arrays als Parameter an die Println-Funktion wird der Inhalt des Arrays automatisch formatiert und gedruckt. Diese Methode ist sehr einfach und effizient und funktioniert für Arrays jeder Größe. Darüber hinaus bietet Golang auch einige andere Methoden zum Drucken von Arrays, z. B. die Verwendung der Join-Funktion im Strings-Paket, um Array-Elemente zu Strings zu verbinden und diese dann auszudrucken, oder die Verwendung einer Schleife zum Durchlaufen des Arrays und zum Drucken jedes Elements. Aber relativ gesehen ist die direkte Verwendung der Println-Funktion die einfachste und effektivste Methode. Ob während der Entwicklung oder beim Debuggen: Das Drucken von Arrays ist ein sehr häufiger Vorgang. Die Beherrschung der effektivsten Methode kann die Entwicklungseffizienz verbessern.

Frageninhalt

Ich bin neu in der Programmierung und möchte mehr über integrierte Funktionen erfahren:

Das ist das Programm:

func main() {
    start := time.now()

    fmt.println(os.args)

    fmt.println(time.since(start))
}
Nach dem Login kopieren

und seine Ausgabe:

[a b c d e f g h i j k l m n o p] 124.009µs

Das ist meine for-Schleife:

package main

import (
"fmt"
"os"
"time"
)

func main() {
start := time.Now()

    var s string
    for i:=0; i<len(os.Args); i++{
        s += os.Args[i] + " " 
    }
    fmt.Println(s)
    
    fmt.Println(time.Since(start))

}
Nach dem Login kopieren

Die Ausgabe ist wie folgt:

/tmp/go-build994847456/b001/exe/main a b c d e f g h i j k l m n o p 25.71μs

Ich wünschte, die integrierten Funktionen in der Standardbibliothek wären schneller.

Wird mein Code durch das Slicen weniger effizient?

Soll ich eine for-Schleife oder die Standardbibliothek verwendenfmt.println?

Ich bin auch verwirrt strings.join(os.args[1:], " ") Wie man 74,293μs durchführt

Lösung

Benchmark verwenden:

var slice = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"}

func benchmarkfmt(b *testing.b) {
    b.reportallocs()
    for n := 0; n < b.n; n++ {
        _ = fmt.sprint(slice)
    }
}

func benchmarkstringconcat(b *testing.b) {
    b.reportallocs()
    for n := 0; n < b.n; n++ {
        var str string
        for _, s := range slice {
            str += s + " "
        }
    }
}

func benchmarkstringsbuilder(b *testing.b) {
    b.reportallocs()
    for n := 0; n < b.n; n++ {
        var l int
        for _, s := range slice {
            l += len(s)
        }
        var sb strings.builder
        sb.grow(l + len(slice)*len(" "))
        for _, s := range slice {
            sb.writestring(s)
            sb.writestring(" ")
        }
        _ = sb.string()
    }
}

func benchmarkstringsjoin(b *testing.b) {
    b.reportallocs()
    for n := 0; n < b.n; n++ {
        _ = strings.join(slice, " ")
    }
}
Nach dem Login kopieren
BenchmarkFMT
BenchmarkFMT-8                    734088          1633 ns/op         616 B/op         34 allocs/op
BenchmarkStringConcat
BenchmarkStringConcat-8          1290666           919.1 ns/op      1200 B/op         32 allocs/op
BenchmarkStringsBuilder
BenchmarkStringsBuilder-8        6074888           198.6 ns/op        64 B/op          1 allocs/op
BenchmarkStringsJoin
BenchmarkStringsJoin-8           4941542           241.7 ns/op        64 B/op          1 allocs/op
PASS
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas ist der effizienteste Weg, ein Array in Golang zu drucken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!