# #string #go
Вопрос:
Ниже приведена программа, которую я создал, чтобы понять, как индексирование строковых символов работает в Go:
package main
import "fmt"
func main() {
vendor1 := "Cisco"
fmt.Println(vendor1[0])
fmt.Println(vendor1[1:4])
fmt.Println(vendor1[1:])
fmt.Println(vendor1[:])
}
Выход:
C:GolangVARIABLE> go run .variable.go
67
isc
isco
Cisco
Что меня озадачило, так это то, что Println(vendor1[0]) возвращает число » 67 «вместо » C», почему это так? Почему он отличается от Println(поставщик 1[1:4]) , Println(поставщик 1[1:]) и Println(поставщик 1 [:]), которые все возвращают нужные символы?
Ответ №1:
Выражения индекса-это не то же самое, что выражения среза, не объединяйте их.
Индексирование, в отличие от нарезки, возвращает byte
псевдоним типа uint8
и Println
просто выводит целое число без знака.
Нарезка возвращает строку, поэтому Println
выводит текст.
Комментарии:
1. Спасибо, я понял твою точку зрения. Я понял, что мне нужно использовать string() для преобразования байта в строку после индексирования.
Ответ №2:
Чтобы напечатать значение с индексом 0 ,используйте fmt.Printf("%cn", vendor1[0])
вместо fmt.Println(vendor1[0])
, для трех других значений, которые вы можете использовать %s
, fmt.Printf()
так как они являются строковыми.Я изменил ваш код следующим образом:
package main
import (
"fmt"
)
func main() {
vendor1 := "Cisco"
fmt.Printf("%cn", vendor1[0])
fmt.Printf("%sn", vendor1[1:4])
fmt.Printf("%sn", vendor1[1:])
fmt.Printf("%sn", vendor1[:])
}
Выход:
C
isc
isco
Cisco