strconv
Официальная документация: strconv package - strconv - Go Packages
Пакет strconv реализует преобразование между строковым представлением и базовыми типами данных.
Импорт
import (
"strconv"
)Ниже будет показано, как использовать пакет на примерах.
Преобразование строки в целое число
func Atoi(s string) (int, error)s— строка для преобразования
func TestAoti(t *testing.T) {
ints, err := strconv.Atoi("456789")
fmt.Println(ints, err)
}=== RUN TestAoti
456789 <nil>
--- PASS: TestAoti (0.00s)
PASSПреобразование целого числа в строку
func Itoa(i int) stringi— целое число для преобразования
func TestIota(t *testing.T) {
str := strconv.Itoa(114)
fmt.Println(str)
}=== RUN TestIota
114
--- PASS: TestIota (0.00s)
PASSПреобразование строки в булево значение
func ParseBool(str string) (bool, error)s— строка для преобразования
Строки, которые могут быть преобразованы:
"1", "t", "T", "true", "TRUE", "True" // true
"0", "f", "F", "false", "FALSE", "False" // falsefunc TestAtob(t *testing.T) {
parseBool, err := strconv.ParseBool("1")
fmt.Println(parseBool, err)
b, err := strconv.ParseBool("true")
fmt.Println(b, err)
b2, err := strconv.ParseBool("FALSE")
fmt.Println(b2, err)
}=== RUN TestAotb
true <nil>
true <nil>
false <nil>
--- PASS: TestAotb (0.00s)
PASSПреобразование булевого значения в строку
func FormatBool(b bool) stringb— булево значение
func TestBota(t *testing.T) {
fmt.Println(strconv.FormatBool(true))
fmt.Println(strconv.FormatBool(false))
}=== RUN TestBota
true
false
--- PASS: TestBota (0.00s)
PASSПреобразование в Go-строку
Обе функции преобразуют строку в строку Go с кавычками. Разница в том, что вторая функция экранирует не-ASCII символы через \u.
func TestQuote(t *testing.T) {
fmt.Println(strconv.Quote("hello 世界"))
fmt.Println(strconv.QuoteToASCII("hello 世界"))
}=== RUN TestQuote
"hello 世界"
"hello \u4e16\u754c"
--- PASS: TestQuote (0.00s)
PASSПреобразование строки в число с плавающей точкой
func ParseFloat(s string, bitSize int) (float64, error)s— строка для преобразованияbitSize— разрядность
func TestParseFloat(t *testing.T) {
float, err := strconv.ParseFloat("1.145114", 64)
fmt.Println(float, err)
float, err = strconv.ParseFloat("2.3333333333333333333", 64)
fmt.Println(float, err)
}=== RUN TestFloat
1.145114 <nil>
2.3333333333333335 <nil>
--- PASS: TestFloat (0.00s)
PASSПреобразование числа с плавающей точкой в строку
При преобразовании чисел с плавающей точкой официальная библиотека предоставляет несколько форматов для вывода различных стилей.
// 'b' (-ddddp±ddd, двоичный экспоненциальный формат),
// 'e' (-d.dddde±dd, десятичный экспоненциальный формат с маленькой e),
// 'E' (-d.ddddE±dd, десятичный экспоненциальный формат с большой E),
// 'f' (-ddd.dddd, без экспоненты), // обычно используется этот, если нет особых требований
// 'g' (для больших экспонент используется формат 'e', для малых — 'f'),
// 'G' (для больших экспонент используется формат 'E', для малых — 'f'),
// 'x' (-0xd.ddddp±ddd, шестнадцатеричная дробь и двоичный экспонент),
// 'X' (-0Xd.ddddP±ddd, шестнадцатеричная дробь и двоичный экспонент).Функция преобразования:
func FormatFloat(f float64, fmt byte, prec, bitSize int) string- f — число с плавающей точкой для преобразования
- fmt — тип форматирования
- prec — точность, кроме случаев g/G, где указывает максимальное количество значащих цифр, в остальных случаях — количество знаков после запятой
- bitSize — разрядность
Обычно используется формат 'f' для преобразования в десятичную дробь.
func TestFormatFloat(t *testing.T) {
f := 1315643.14159261234567891011
fmt.Println(strconv.FormatFloat(f, 'f', 6, 64))
fmt.Println(strconv.FormatFloat(f, 'b', 6, 64))
fmt.Println(strconv.FormatFloat(f, 'e', 6, 64))
fmt.Println(strconv.FormatFloat(f, 'x', 6, 64))
fmt.Println(strconv.FormatFloat(f, 'g', 6, 64))
fmt.Println(strconv.FormatFloat(1.111, 'g', 6, 64))
}=== RUN TestFormatFloat
1315643.141593
5650644266346967p-32
1.315643e+06
0x1.4133b2p+20
1.31564e+06
1.111
--- PASS: TestFormatFloat (0.00s)
PASSПреобразование строки в комплексное число
func ParseComplex(s string, bitSize int) (complex128, error)s— строка для преобразованияbitSize— разрядность
func TestParseComplex(t *testing.T) {
fmt.Println(strconv.ParseComplex("1+2i", 128))
fmt.Println(strconv.ParseComplex("1+2j", 128))
}=== RUN TestParseComplex
(1+2i) <nil>
(0+0i) strconv.ParseComplex: parsing "1+2j": invalid syntax
--- PASS: TestParseComplex (0.00s)
PASSПреобразование комплексного числа в строку
func FormatComplex(c complex128, fmt byte, prec, bitSize int) stringc— комплексное числоfmt— тип форматирования, см. форматирование чисел с плавающей точкойprec— точность, см. точность для чисел с плавающей точкойbitSize— разрядность
func TestFormatComplex(t *testing.T) {
fmt.Println(strconv.FormatComplex(complex(1.1, 12), 'f', 2, 128))
fmt.Println(strconv.FormatComplex(complex(5.6, 2.8), 'b', 2, 128))
fmt.Println(strconv.FormatComplex(complex(18.88999, 89.7), 'g', 2, 128))
}=== RUN TestFormatComplex
(1.10+12.00i)
(6305039478318694p-50+6305039478318694p-51i)
(19+90i)
--- PASS: TestFormatComplex (0.00s)
PASSДобавление данных в строку
В других языках, например Java, результат "1"+1 будет "11", Java автоматически выполняет преобразование типов. В Go такая операция недопустима, так как типы данных различны. Поэтому используются функции Append из пакета strconv. Параметры аналогичны соответствующим функциям преобразования данных, описанным выше.
func TestAppend(t *testing.T) {
bytes := []byte("Здесь есть некоторые данные:")
bytes = strconv.AppendInt(bytes, 10, 10)
bytes = strconv.AppendFloat(bytes, 1.2222, 'f', 2, 64)
bytes = strconv.AppendBool(bytes, false)
fmt.Println(string(bytes))
}=== RUN TestAppend
Здесь есть некоторые данные:101.22false
--- PASS: TestAppend (0.00s)
PASS