Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der effizienteste Weg, ein Array in Golang zu drucken?

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

王林
王林nach vorne
2024-02-10 09:30:23640Durchsuche

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))
}

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))

}

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, " ")
    }
}
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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen