Heim >Backend-Entwicklung >Golang >So verbessern Sie die Segmentierungslogik in Golang

So verbessern Sie die Segmentierungslogik in Golang

PHPz
PHPznach vorne
2024-02-09 10:00:41993Durchsuche

So verbessern Sie die Segmentierungslogik in Golang

In Golang ist das Teilen einer Zeichenfolge ein häufiger Vorgang. Allerdings kann es manchmal zu Problemen mit der Teilungslogik kommen. Wie kann also die Segmentierungslogik in Golang verbessert werden? In diesem Artikel stellt Ihnen der PHP-Editor Yuzai einige praktische Tipps und Methoden vor, die Ihnen helfen, die Segmentierungslogik in Golang zu optimieren und zu verbessern und Ihren Code effizienter und zuverlässiger zu machen. Lasst uns gemeinsam erkunden!

Frageninhalt

Betrachten Sie die folgenden Beispiele als mögliche Werte im Index:

values := [5]string{"32.5ms", "32.5 ms", "32.5%", "32.5 %", "none"}

Bitte beachten Sie, dass der ursprüngliche Wert möglicherweise Leerzeichen für die Maßeinheit enthält (32,5 %, 32,5 %, 32,5 %, usw.)

Ich muss den Gleitkommawert und die Maßeinheit (%, ms usw.) vom ursprünglichen Wert trennen. Der folgende Code liefert mir das gewünschte Ergebnis, aber ich möchte wissen, ob es einen gibt Sauberere Möglichkeit, die gleiche Logik auszuführen, möglicherweise sind keine regulären Ausdrücke erforderlich.

package main

import (
    "fmt"
    "regexp"
    "strings"
)

func main() {

    regexFloatNumbers := regexp.MustCompile(`[-]?\d[\d,]*[\.]?[\d{2}]*`)

    values := [5]string{"32.5ms", "32.5 ms", "32.5%", "32.5 %", "none"}

    for _, value := range values {

        if regexFloatNumbers.MatchString(value) {
            floatValue := regexFloatNumbers.FindString(value)
            fmt.Printf("ORIGINAL VALUE: %q\n", value)
            fmt.Printf("UNIT: %q\n", strings.TrimSpace(regexFloatNumbers.Split(value, -1)[1]))
            fmt.Printf("FLOAT VALUE: %v\n\n", floatValue)
        } else {
            fmt.Printf("float value for %v has not being found!", value)
        }

    }

}

Workaround

Reguläre Ausdrücke scheinen hier gut zu passen. Persönlich würde ich dafür Untergruppen verwenden, etwa so (ich habe auch Ihre Regex bereinigt, die unnötige Syntax hatte und wie eine falsche Schreibweise von [d{2}]* aussah):

regexFloatNumbers := regexp.MustCompile(`(-?\d[\d,]*\.?\d*) *(.*)`)

// ...

floatValue := regexFloatNumbers.FindStringSubmatch(value)
fmt.Printf("ORIGINAL VALUE: %q\n", value)
fmt.Printf("UNIT: %q\n", floatValue[1])
fmt.Printf("FLOAT VALUE: %v\n\n", floatValue[2])

https://www.php.cn/link/8af0c75579a632c9207e51657de43c7c

Das obige ist der detaillierte Inhalt vonSo verbessern Sie die Segmentierungslogik in Golang. 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