Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk meningkatkan logik segmentasi dalam golang

Bagaimana untuk meningkatkan logik segmentasi dalam golang

PHPz
PHPzke hadapan
2024-02-09 10:00:41906semak imbas

Bagaimana untuk meningkatkan logik segmentasi dalam golang

Dalam golang, membelah rentetan adalah operasi biasa Namun, kadangkala kita mungkin menghadapi beberapa masalah dengan logik belah. Jadi, bagaimana untuk menambah baik logik segmentasi dalam golang? Dalam artikel ini, editor PHP Yuzai akan memperkenalkan anda kepada beberapa petua dan kaedah praktikal untuk membantu anda mengoptimumkan dan meningkatkan logik pembahagian dalam golang, menjadikan kod anda lebih cekap dan boleh dipercayai. Mari kita meneroka bersama-sama!

Kandungan soalan

Pertimbangkan contoh berikut sebagai nilai yang mungkin dalam indeks:

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

Sila ambil perhatian bahawa nilai asal mungkin mempunyai ruang atau mungkin tidak mempunyai ruang untuk unit ukuran (32.5%, 32.5 %, 32.5 %, dsb.)

Saya perlu mengasingkan nilai titik terapung dan unit ukuran (%, ms, dsb.) daripada nilai asal, kod di bawah memberikan saya hasil yang saya inginkan, tetapi saya ingin tahu jika ada cara yang lebih bersih untuk melakukan Logik yang sama, mungkin tidak memerlukan ungkapan biasa.

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

    }

}

Penyelesaian

Ekspresi biasa nampaknya sesuai di sini. Secara peribadi, saya akan menggunakan subkumpulan untuk ini, seperti ini (saya juga membersihkan regex anda, yang mempunyai beberapa sintaks yang tidak perlu dan kelihatan seperti salah ejaan [d{2}]*):

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

Atas ialah kandungan terperinci Bagaimana untuk meningkatkan logik segmentasi dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam