Почему toTitle не пишет слово в нижнем регистре в Go с большой буквы?

Мне нужно реализовать метод заглавных букв Python в Go. Я знаю, что сначала мне нужно перевести его в нижний регистр, а затем использовать toTitle. Взгляните на пример кода:

package main
import (
    "fmt"
    "strings"
)

func main() {
    s := "ALIREZA"
    loweredVal:=strings.ToLower(s)
    fmt.Println("loweredVal:", loweredVal)
    toTitle := strings.ToTitle(loweredVal)
    fmt.Println("toTitle:", toTitle)
}

person Alireza    schedule 24.07.2019    source источник
comment
Связано: stackoverflow.com/questions/18559587/   -  person mkopriva    schedule 24.07.2019
comment
А в чем вопрос? Что-то не работает с данным кодом?   -  person Nico Haase    schedule 24.07.2019


Ответы (1)


В Python метод capitalize() преобразует первый символ строки в заглавную (верхнюю) букву.

Если вы хотите сделать то же самое с Go, вы можете изменить содержимое строки, а затем использовать метод пакета unicode ToUpper, чтобы преобразовать первую руну в строке в верхний регистр, затем преобразовать ее в строку, а затем объединить ее с остальной частью исходной строки.

Однако для вашего примера (поскольку ваша строка состоит всего из одного слова) см. Title из пакета strings.

пример:

package main

import (
    "fmt"
    "strings"
    "unicode"
)

func main() {
    s := "ALIREZA foo bar"
    loweredVal := strings.ToLower(s)
    fmt.Println("loweredVal:", loweredVal)
    toTitle := capFirstChar(loweredVal)
    fmt.Println("toTitle:", toTitle)
}

func capFirstChar(s string) string {
    for index, value := range s {
        return string(unicode.ToUpper(value)) + s[index+1:]
    }
    return ""
}
person waymobetta    schedule 24.07.2019
comment
Title() не делает заглавной первую букву строки — она делает заглавной первую букву каждого слова. - person Flimzy; 24.07.2019
comment
Хороший вопрос, это было хорошо для его примера, но потерпит неудачу в других случаях со строками из нескольких слов. Спасибо, отредактировал - person waymobetta; 24.07.2019