O método Go strings.Title está obsoleto (obsoleto)

O uso de strings.Título

Tradicionalmente, podemos colocar a primeira letra de cada palavra em maiúscula da seguinte forma, por exemplo:

func TestTitle(t *testing.T) {  
    fmt.Println(strings.Title("hello world"))  
    fmt.Println(strings.Title("hell golang"))  
    fmt.Println(strings.Title("xiexie"))  
}

Execute o código acima e os resultados de impressão correspondentes serão os seguintes:

Hello World
Hell Golang
Xiexie

Como você pode ver, strings.Title colocará a primeira letra de cada palavra em maiúscula.

Existem também duas funções em strings: ToTitle e ToUpper, que possuem funções semelhantes, e todos os caracteres são transformados em letras maiúsculas.

Os exemplos são os seguintes:

func TestTitle2(t *testing.T) {  
    fmt.Println(strings.ToTitle("hello world"))  
    fmt.Println(strings.ToUpper("hello golang"))  
}

A saída é a seguinte:

HELLO WORLD
HELLO GOLANG

Mas você pode ver que a função Title foi abandonada nos prompts do IDE e nos documentos oficiais. O principal motivo é: as regras para strings.Title estão usando limites de palavras, que não lidam corretamente com a pontuação Unicode.

Os exemplos são os seguintes:

func TestTitle3(t *testing.T) {  
    fmt.Println(strings.Title("here comes o'brian"))  
}

A saída é a seguinte:

Here Comes O'Brian

Percebe-se que o “B” também está maiúsculo.

Dois problemas principais com strings.Title:

  • A pontuação Unicode não é tratada corretamente.
  • As regras de capitalização de línguas humanas específicas não são levadas em consideração.

Problemas Unicode

Vejamos outro exemplo sobre pontuação Unicode:

func TestTitle5(t *testing.T) {  
    a := strings.Title("go.go\u2024go")  
    b := "Go.Go\u2024Go"  
    if a != b {  
        fmt.Printf("%s != %s\n", a, b)  
    }  
}

A saída é:

Go.Go․go != Go.Go․Go

O resultado do processamento de conversão variável é "Go.Go․go", mas de acordo com a necessidade real, deve ser "Go.Go․Go".

problemas específicos de idioma

código mostrado abaixo:

func TestTitle6(t *testing.T) {  
    fmt.Println(strings.Title("ijsland"))  
}

Na palavra holandesa, "ijsland" deveria ser maiúsculo como "IJsland", mas o resultado é convertido para "Ijsland".

pacote golang.org/x/text/cases

Conforme mencionado na documentação de strings.Title, a função de strings.Title pode ser substituída por golang.org/x/text/cases, ou seja, cases.Title.

cases.Title fornece um mapa de caso específico do idioma, que possui uma função Title com a seguinte assinatura:

// Title returns a Caser for language-specific title casing. It uses an  
// approximation of the default Unicode Word Break algorithm.  
func Title(t language.Tag, opts ...Option) Caser {  
    return Caser{makeTitle(t, getOpts(opts...))}  
}

O primeiro parâmetro é do tipo idioma.Tag, representando tags de idioma BCP 47. É usado para especificar uma instância de um idioma ou localidade específica.

O segundo parâmetro é um parâmetro indeterminado do tipo Option.

Antes de usá-lo, você precisa importar a biblioteca de classes "golang.org/x/text". por exemplo:

require golang.org/x/text v0.11.0

Os exemplos de uso são os seguintes:

import (  
    "fmt"  
    "golang.org/x/text/cases"  
    "golang.org/x/text/language"  
    "strings"  
    "testing"  
)

func TestTitle4(t *testing.T) {  
    caser := cases.Title(language.English)  
    fmt.Println(caser.String("here comes o'brian"))  
}

A saída é a seguinte:

Here Comes O'brian

Comparando strings.Title, pode-se ver que o "b" de "cérebro" é reconhecido com sucesso aqui e não está em maiúscula.

O tipo de retorno de cases.Title é a estrutura Caser, chame seu método String, este método recebe uma string e retorna uma string processada por Caser.

おすすめ

転載: blog.csdn.net/wo541075754/article/details/132082075