Пакет strconv
Обзор
Пакет strconv реализует преобразования в строковое представление базовых типов данных и обратно.
Преобразование чисел
Наиболее распространённые преобразования чисел — Atoi (из строки в int) и Itoa (из int в строку).
i, err := strconv.Atoi("-42")
s := strconv.Itoa(-42)
Они предполагают десятичную систему счисления и тип Go int.
ParseBool, ParseFloat, ParseInt и ParseUint преобразуют строки в значения:
b, err := strconv.ParseBool("true")
f, err := strconv.ParseFloat("3.1415", 64)
i, err := strconv.ParseInt("-42", 10, 64)
u, err := strconv.ParseUint("42", 10, 64)
Функции разбора возвращают значения максимально широкого типа (float64, int64 и uint64), но если аргумент size задаёт меньшую разрядность, результат можно преобразовать к этому более узкому типу без потери данных:
s := "2147483647" // biggest int32 i64, err := strconv.ParseInt(s, 10, 32) ... i := int32(i64)
FormatBool, FormatFloat, FormatInt и FormatUint преобразуют значения в строки:
s := strconv.FormatBool(true) s := strconv.FormatFloat(3.1415, 'E', -1, 64) s := strconv.FormatInt(-42, 16) s := strconv.FormatUint(42, 16)
AppendBool, AppendFloat, AppendInt и AppendUint выполняют аналогичные операции, но добавляют отформатированное значение в целевой срез.
Преобразование строк
Quote и QuoteToASCII преобразуют строки в заключённые в кавычки строковые литералы Go. Последняя функция гарантирует, что результат будет строкой ASCII, экранируя любые не-ASCII-символы Unicode с помощью \u:
q := strconv.Quote("Hello, 世界")
q := strconv.QuoteToASCII("Hello, 世界")
QuoteRune и QuoteRuneToASCII выполняют аналогичное преобразование, но принимают руны и возвращают заключённые в кавычки рунические литералы Go.
Unquote и UnquoteChar снимают кавычки со строковых и рунических литералов Go.
Указатель
Примеры
- AppendBool
- AppendFloat
- AppendInt
- AppendQuote
- AppendQuoteRune
- AppendQuoteRuneToASCII
- AppendQuoteToASCII
- AppendUint
- Atoi
- CanBackquote
- FormatBool
- FormatFloat
- FormatInt
- FormatUint
- IsGraphic
- IsPrint
- Itoa
- NumError
- ParseBool
- ParseFloat
- ParseInt
- ParseUint
- Quote
- QuoteRune
- QuoteRuneToASCII
- QuoteRuneToGraphic
- QuoteToASCII
- QuoteToGraphic
- QuotedPrefix
- Unquote
- UnquoteChar
Файлы пакета
bytealg.go doc.go isprint.go number.go quote.go
Константы
IntSize — размер значения int или uint в битах.
const IntSize = strconv.IntSize
Переменные
ErrRange указывает, что значение выходит за пределы диапазона целевого типа.
var ErrRange = errors.New("value out of range") ErrSyntax указывает, что значение не соответствует синтаксису целевого типа.
var ErrSyntax = errors.New("invalid syntax") func AppendBool
func AppendBool(dst []byte, b bool) []byte
AppendBool добавляет в dst строку "true" или "false" в зависимости от значения b и возвращает расширенный буфер.
Пример
Код:
b := []byte("bool:")
b = strconv.AppendBool(b, true)
fmt.Println(string(b))
Вывод:
bool:true
func AppendFloat
func AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte
AppendFloat добавляет в dst строковое представление числа с плавающей точкой f, сформированное функцией FormatFloat, и возвращает расширенный буфер.
Пример
Код:
b32 := []byte("float32:")
b32 = strconv.AppendFloat(b32, 3.1415926535, 'E', -1, 32)
fmt.Println(string(b32))
b64 := []byte("float64:")
b64 = strconv.AppendFloat(b64, 3.1415926535, 'E', -1, 64)
fmt.Println(string(b64))
Вывод:
float32:3.1415927E+00 float64:3.1415926535E+00
func AppendInt
func AppendInt(dst []byte, i int64, base int) []byte
AppendInt добавляет в dst строковое представление целого числа i, сформированное функцией FormatInt, и возвращает расширенный буфер.
Пример
Код:
b10 := []byte("int (base 10):")
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))
b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16))
Вывод:
int (base 10):-42 int (base 16):-2a
func AppendQuote
func AppendQuote(dst []byte, s string) []byte
AppendQuote добавляет в dst строковый литерал Go в двойных кавычках, представляющий s и сформированный функцией Quote, и возвращает расширенный буфер.
Пример
Код:
b := []byte("quote:")
b = strconv.AppendQuote(b, `"Fran & Freddie's Diner"`)
fmt.Println(string(b))
Вывод:
quote:"\"Fran & Freddie's Diner\""
func AppendQuoteRune
func AppendQuoteRune(dst []byte, r rune) []byte
AppendQuoteRune добавляет в dst символьный литерал Go в одинарных кавычках, представляющий руну и сформированный функцией QuoteRune, и возвращает расширенный буфер.
Пример
Код:
b := []byte("rune:")
b = strconv.AppendQuoteRune(b, '☺')
fmt.Println(string(b))
Вывод:
rune:'☺'
func AppendQuoteRuneToASCII
func AppendQuoteRuneToASCII(dst []byte, r rune) []byte
AppendQuoteRuneToASCII добавляет в dst символьный литерал Go в одинарных кавычках, представляющий руну и сформированный функцией QuoteRuneToASCII, и возвращает расширенный буфер.
Пример
Код:
b := []byte("rune (ascii):")
b = strconv.AppendQuoteRuneToASCII(b, '☺')
fmt.Println(string(b))
Вывод:
rune (ascii):'\u263a'
func AppendQuoteRuneToGraphic 1.6
func AppendQuoteRuneToGraphic(dst []byte, r rune) []byte
AppendQuoteRuneToGraphic добавляет в dst символьный литерал Go в одинарных кавычках, представляющий руну и сформированный функцией QuoteRuneToGraphic, и возвращает расширенный буфер.
func AppendQuoteToASCII
func AppendQuoteToASCII(dst []byte, s string) []byte
AppendQuoteToASCII добавляет в dst строковый литерал Go в двойных кавычках, представляющий s и сформированный функцией QuoteToASCII, и возвращает расширенный буфер.
Пример
Код:
b := []byte("quote (ascii):")
b = strconv.AppendQuoteToASCII(b, `"Fran & Freddie's Diner"`)
fmt.Println(string(b))
Вывод:
quote (ascii):"\"Fran & Freddie's Diner\""
func AppendQuoteToGraphic 1.6
func AppendQuoteToGraphic(dst []byte, s string) []byte
AppendQuoteToGraphic добавляет в dst строковый литерал Go в двойных кавычках, представляющий s и сформированный функцией QuoteToGraphic, и возвращает расширенный буфер.
func AppendUint
func AppendUint(dst []byte, i uint64, base int) []byte
AppendUint добавляет в dst строковое представление беззнакового целого числа i, сформированное функцией FormatUint, и возвращает расширенный буфер.
Пример
Код:
b10 := []byte("uint (base 10):")
b10 = strconv.AppendUint(b10, 42, 10)
fmt.Println(string(b10))
b16 := []byte("uint (base 16):")
b16 = strconv.AppendUint(b16, 42, 16)
fmt.Println(string(b16))
Вывод:
uint (base 10):42 uint (base 16):2a
func Atoi
func Atoi(s string) (int, error)
Atoi эквивалентна ParseInt(s, 10, 0) с преобразованием результата к типу int.
Пример
Код:
v := "10"
if s, err := strconv.Atoi(v); err == nil {
fmt.Printf("%T, %v", s, s)
}
Вывод:
int, 10
func CanBackquote
func CanBackquote(s string) bool
CanBackquote сообщает, можно ли представить строку s без изменений в виде строки в обратных кавычках, занимающей одну строку и не содержащей управляющих символов, кроме табуляции.
Пример
Код:
fmt.Println(strconv.CanBackquote("Fran & Freddie's Diner ☺"))
fmt.Println(strconv.CanBackquote("`can't backquote this`"))
Вывод:
true false
func FormatBool
func FormatBool(b bool) string
FormatBool возвращает "true" или "false" в зависимости от значения b.
Пример
Код:
v := true
s := strconv.FormatBool(v)
fmt.Printf("%T, %v\n", s, s)
Вывод:
string, true
func FormatComplex 1.15
func FormatComplex(c complex128, fmt byte, prec, bitSize int) string
FormatComplex преобразует комплексное число c в строку вида (a+bi), где a и b — действительная и мнимая части, отформатированные согласно параметрам формата fmt и точности prec.
Параметры формата fmt и точности prec имеют тот же смысл, что и в FormatFloat. Результат округляется исходя из предположения, что исходное значение было получено из комплексного числа размером bitSize бит, где для complex64 это значение должно быть равно 64, а для complex128 — 128.
func FormatFloat
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
FormatFloat преобразует число с плавающей точкой f в строку согласно параметрам формата fmt и точности prec. Результат округляется исходя из предположения, что исходное значение было получено из числа с плавающей точкой размером bitSize бит (32 для float32, 64 для float64).
Параметр формата fmt принимает одно из следующих значений:
- 'b' (-ddddp±ddd, двоичный показатель степени),
- 'e' (-d.dddde±dd, десятичный показатель степени),
- 'E' (-d.ddddE±dd, десятичный показатель степени),
- 'f' (-ddd.dddd, без показателя степени),
- 'g' ('e' для больших показателей степени, в остальных случаях 'f'),
- 'G' ('E' для больших показателей степени, в остальных случаях 'f'),
- 'x' (-0xd.ddddp±ddd, шестнадцатеричная дробная часть и двоичный показатель степени) или
- 'X' (-0Xd.ddddP±ddd, шестнадцатеричная дробная часть и двоичный показатель степени).
Точность prec задаёт количество цифр (не включая показатель степени), выводимых форматами 'e', 'E', 'f', 'g', 'G', 'x' и 'X'. Для форматов 'e', 'E', 'f', 'x' и 'X' это количество цифр после десятичной точки. Для форматов 'g' и 'G' это максимальное количество значащих цифр (конечные нули удаляются). Специальное значение точности -1 задаёт минимальное количество цифр, необходимое для того, чтобы ParseFloat вернула f без изменений. Показатель степени записывается как десятичное целое число; для всех форматов, кроме 'b', он содержит не менее двух цифр.
Пример
Код:
v := 3.1415926535
s32 := strconv.FormatFloat(v, 'E', -1, 32)
fmt.Printf("%T, %v\n", s32, s32)
s64 := strconv.FormatFloat(v, 'E', -1, 64)
fmt.Printf("%T, %v\n", s64, s64)
// fmt.Println uses these arguments to print floats
fmt64 := strconv.FormatFloat(v, 'g', -1, 64)
fmt.Printf("%T, %v\n", fmt64, fmt64)
Вывод:
string, 3.1415927E+00 string, 3.1415926535E+00 string, 3.1415926535
func FormatInt
func FormatInt(i int64, base int) string
FormatInt возвращает строковое представление i в указанной системе счисления, где 2 <= base <= 36. Для значений цифр >= 10 в результате используются строчные буквы от 'a' до 'z'.
Пример
Код:
v := int64(-42)
s10 := strconv.FormatInt(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
s16 := strconv.FormatInt(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
Вывод:
string, -42 string, -2a
func FormatUint
func FormatUint(i uint64, base int) string
FormatUint возвращает строковое представление i в указанной системе счисления, где 2 <= base <= 36. Для значений цифр >= 10 в результате используются строчные буквы от 'a' до 'z'.
Пример
Код:
v := uint64(42)
s10 := strconv.FormatUint(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
s16 := strconv.FormatUint(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
Вывод:
string, 42 string, 2a
func IsGraphic 1.6
func IsGraphic(r rune) bool
IsGraphic сообщает, определена ли руна Unicode как графический символ. К таким символам относятся буквы, диакритические знаки, цифры, знаки препинания, символы и пробелы из категорий L, M, N, P, S и Zs.
Пример
Код:
shamrock := strconv.IsGraphic('☘')
fmt.Println(shamrock)
a := strconv.IsGraphic('a')
fmt.Println(a)
bel := strconv.IsGraphic('\007')
fmt.Println(bel)
Вывод:
true true false
func IsPrint
func IsPrint(r rune) bool
IsPrint сообщает, определена ли руна как печатный символ в Go; определение совпадает с unicode.IsPrint: буквы, цифры, знаки препинания, символы и пробел ASCII.
Пример
Код:
c := strconv.IsPrint('\u263a')
fmt.Println(c)
bel := strconv.IsPrint('\007')
fmt.Println(bel)
Вывод:
true false
func Itoa
func Itoa(i int) string
Itoa эквивалентна FormatInt(int64(i), 10).
Пример
Код:
i := 10
s := strconv.Itoa(i)
fmt.Printf("%T, %v\n", s, s)
Вывод:
string, 10
func ParseBool
func ParseBool(str string) (bool, error)
ParseBool возвращает логическое значение, представленное строкой. Допустимые значения: 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False. Для любого другого значения возвращается ошибка.
Пример
Код:
v := "true"
if s, err := strconv.ParseBool(v); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
Вывод:
bool, true
func ParseComplex 1.15
func ParseComplex(s string, bitSize int) (complex128, error)
ParseComplex преобразует строку s в комплексное число с точностью, заданной параметром bitSize: 64 для complex64 или 128 для complex128. Если bitSize=64, результат всё равно имеет тип complex128, но его можно преобразовать в complex64 без изменения значения.
Число, представленное строкой s, должно иметь вид N, Ni или N±Ni, где N — число с плавающей точкой в формате, распознаваемом ParseFloat, а i — мнимая часть. Если второе N не имеет знака, между двумя компонентами, как указано символом ±, требуется знак +. Если второе N — NaN, допускается только знак +. Выражение может быть заключено в скобки и не должно содержать пробелов. Результирующее комплексное число состоит из двух компонент, преобразованных с помощью ParseFloat.
Ошибки, возвращаемые ParseComplex, имеют конкретный тип *NumError и включают err.Num = s.
Если строка s синтаксически некорректна, ParseComplex возвращает err.Err = ErrSyntax.
Если строка s синтаксически корректна, но хотя бы одна компонента отстоит более чем на 1/2 ULP от наибольшего числа с плавающей точкой для размера этой компоненты, ParseComplex возвращает err.Err = ErrRange и c = ±Inf для соответствующей компоненты.
func ParseFloat
func ParseFloat(s string, bitSize int) (float64, error)
ParseFloat преобразует строку s в число с плавающей точкой с точностью, заданной параметром bitSize: 32 для float32 или 64 для float64. Если bitSize=32, результат всё равно имеет тип float64, но его можно преобразовать в float32 без изменения значения.
ParseFloat принимает десятичные и шестнадцатеричные числа с плавающей точкой, определённые синтаксисом Go для литералов с плавающей точкой. Если строка s имеет корректный формат и близка к допустимому числу с плавающей точкой, ParseFloat возвращает ближайшее число с плавающей точкой, округлённое по правилу IEEE754 с округлением к ближайшему. (При разборе шестнадцатеричного числа с плавающей точкой округление выполняется только в том случае, если в шестнадцатеричном представлении больше битов, чем помещается в мантиссу.)
Ошибки, возвращаемые ParseFloat, имеют конкретный тип *NumError и включают err.Num = s.
Если строка s синтаксически некорректна, ParseFloat возвращает err.Err = ErrSyntax.
Если строка s синтаксически корректна, но отстоит более чем на 1/2 ULP от наибольшего числа с плавающей точкой заданного размера, ParseFloat возвращает f = ±Inf, err.Err = ErrRange.
ParseFloat распознаёт строку "NaN", а также строки "Inf" и "Infinity" (возможно, со знаком) как соответствующие специальные значения с плавающей точкой. При сопоставлении регистр не учитывается.
Пример
Код:
v := "3.1415926535"
if s, err := strconv.ParseFloat(v, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat(v, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("NaN", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// ParseFloat is case insensitive
if s, err := strconv.ParseFloat("nan", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("inf", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("+Inf", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("-Inf", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("-0", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseFloat("+0", 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
Вывод:
float64, 3.1415927410125732 float64, 3.1415926535 float64, NaN float64, NaN float64, +Inf float64, +Inf float64, -Inf float64, -0 float64, 0
func ParseInt
func ParseInt(s string, base int, bitSize int) (i int64, err error)
ParseInt интерпретирует строку s в указанной системе счисления (0, от 2 до 36) и с указанным размером в битах (от 0 до 64) и возвращает соответствующее значение i.
Строка может начинаться со знака "+" или "-".
Если аргумент base равен 0, фактическая система счисления определяется префиксом строки после знака (если он есть): 2 для "0b", 8 для "0" или "0o", 16 для "0x" и 10 в остальных случаях. Кроме того, только при значении аргумента base, равном 0, допускаются символы подчёркивания, как это определено синтаксисом Go для целочисленных литералов.
Аргумент bitSize задаёт целочисленный тип, диапазону которого должно соответствовать возвращаемое значение. Размеры в битах 0, 8, 16, 32 и 64 соответствуют типам int, int8, int16, int32 и int64. Если bitSize меньше 0 или больше 64, возвращается ошибка.
Ошибки, возвращаемые ParseInt, имеют конкретный тип *NumError и включают err.Num = s. Если строка s пуста или содержит недопустимые цифры, err.Err = ErrSyntax, а возвращаемое значение равно 0; если значение, соответствующее строке s, нельзя представить знаковым целым числом указанного размера, err.Err = ErrRange, а возвращаемое значение равно целому числу максимальной величины с соответствующими bitSize и знаком.
Пример
Код:
v32 := "-354634382"
if s, err := strconv.ParseInt(v32, 10, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v32, 16, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
v64 := "-3546343826724305832"
if s, err := strconv.ParseInt(v64, 10, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v64, 16, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
Вывод:
int64, -354634382 int64, -3546343826724305832
func ParseUint
func ParseUint(s string, base int, bitSize int) (uint64, error)
ParseUint аналогична ParseInt, но предназначена для беззнаковых чисел.
Префикс знака не допускается.
Пример
Код:
v := "42"
if s, err := strconv.ParseUint(v, 10, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseUint(v, 10, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
Вывод:
uint64, 42 uint64, 42
func Quote
func Quote(s string) string
Quote возвращает строковый литерал Go в двойных кавычках, представляющий s. В возвращаемой строке для управляющих и непечатаемых символов используются escape-последовательности Go (\t, \n, \xFF, \u0100), как определено функцией IsPrint.
Пример
Код:
// This string literal contains a tab character. s := strconv.Quote(`"Fran & Freddie's Diner ☺"`) fmt.Println(s)
Вывод:
"\"Fran & Freddie's Diner\t☺\""
func QuoteRune
func QuoteRune(r rune) string
QuoteRune возвращает символьный литерал Go в одинарных кавычках, представляющий руну. В возвращаемой строке для управляющих и непечатаемых символов используются escape-последовательности Go (\t, \n, \xFF, \u0100), как определено функцией IsPrint. Если r не является допустимой кодовой точкой Unicode, она интерпретируется как символ замены Unicode U+FFFD.
Пример
Код:
s := strconv.QuoteRune('☺')
fmt.Println(s)
Вывод:
'☺'
func QuoteRuneToASCII
func QuoteRuneToASCII(r rune) string
QuoteRuneToASCII возвращает символьный литерал Go в одинарных кавычках, представляющий руну. В возвращаемой строке для символов, отличных от ASCII, и непечатаемых символов используются escape-последовательности Go (\t, \n, \xFF, \u0100), как определено функцией IsPrint. Если r не является допустимой кодовой точкой Unicode, она интерпретируется как символ замены Unicode U+FFFD.
Пример
Код:
s := strconv.QuoteRuneToASCII('☺')
fmt.Println(s)
Вывод:
'\u263a'
func QuoteRuneToGraphic 1.6
func QuoteRuneToGraphic(r rune) string
QuoteRuneToGraphic возвращает символьный литерал Go в одинарных кавычках, представляющий руну. Если руна не является графическим символом Unicode, согласно определению IsGraphic, возвращаемая строка будет использовать escape-последовательность Go (\t, \n, \xFF, \u0100). Если r не является допустимой кодовой точкой Unicode, он интерпретируется как символ замены Unicode U+FFFD.
Пример
Код:
s := strconv.QuoteRuneToGraphic('☺')
fmt.Println(s)
s = strconv.QuoteRuneToGraphic('\u263a')
fmt.Println(s)
s = strconv.QuoteRuneToGraphic('\u000a')
fmt.Println(s)
s = strconv.QuoteRuneToGraphic(' ') // tab character
fmt.Println(s)
Вывод:
'☺' '☺' '\n' '\t'
func QuoteToASCII
func QuoteToASCII(s string) string
QuoteToASCII возвращает строковый литерал Go в двойных кавычках, представляющий s. В возвращаемой строке используются escape-последовательности Go (\t, \n, \xFF, \u0100) для символов, отличных от ASCII, и непечатаемых символов согласно определению IsPrint.
Пример
Код:
// This string literal contains a tab character. s := strconv.QuoteToASCII(`"Fran & Freddie's Diner ☺"`) fmt.Println(s)
Вывод:
"\"Fran & Freddie's Diner\t\u263a\""
func QuoteToGraphic 1.6
func QuoteToGraphic(s string) string
QuoteToGraphic возвращает строковый литерал Go в двойных кавычках, представляющий s. Графические символы Unicode, согласно определению IsGraphic, в возвращаемой строке остаются без изменений, а для неграфических символов используются escape-последовательности Go (\t, \n, \xFF, \u0100).
Пример
Код:
s := strconv.QuoteToGraphic("☺")
fmt.Println(s)
// This string literal contains a tab character.
s = strconv.QuoteToGraphic("This is a \u263a \u000a")
fmt.Println(s)
s = strconv.QuoteToGraphic(`" This is a ☺ \n "`)
fmt.Println(s)
Вывод:
"☺" "This is a ☺\t\n" "\" This is a ☺ \\n \""
func QuotedPrefix 1.17
func QuotedPrefix(s string) (string, error)
QuotedPrefix возвращает заключённую в кавычки строку (в понимании Unquote) в начале s. Если s не начинается с допустимой строки в кавычках, QuotedPrefix возвращает ошибку.
Пример
Код:
s, err := strconv.QuotedPrefix("not a quoted string")
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.QuotedPrefix("\"double-quoted string\" with trailing text")
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.QuotedPrefix("`or backquoted` with more trailing text")
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.QuotedPrefix("'\u263a' is also okay")
fmt.Printf("%q, %v\n", s, err)
Вывод:
"", invalid syntax "\"double-quoted string\"", <nil> "`or backquoted`", <nil> "'☺'", <nil>
func Unquote
func Unquote(s string) (string, error)
Unquote интерпретирует s как строковый литерал Go в одинарных, двойных или обратных кавычках и возвращает значение строки, заключённой в кавычки в s. (Если s заключена в одинарные кавычки, это будет символьный литерал Go; Unquote возвращает соответствующую строку из одного символа. Для пустого символьного литерала Unquote возвращает пустую строку.)
Пример
Код:
s, err := strconv.Unquote("You can't unquote a string without quotes")
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.Unquote("\"The string must be either double-quoted\"")
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.Unquote("`or backquoted.`")
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.Unquote("'\u263a'") // single character only allowed in single quotes
fmt.Printf("%q, %v\n", s, err)
s, err = strconv.Unquote("'\u2639\u2639'")
fmt.Printf("%q, %v\n", s, err)
Вывод:
"", invalid syntax "The string must be either double-quoted", <nil> "or backquoted.", <nil> "☺", <nil> "", invalid syntax
func UnquoteChar
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
UnquoteChar декодирует первый символ или байт в экранированной строке или символьном литерале, представленном строкой s. Функция возвращает четыре значения:
- value — декодированную кодовую точку Unicode или значение байта;
- multibyte — логическое значение, указывающее, требуется ли декодированному символу многобайтовое представление UTF-8;
- tail — остаток строки после символа; и
- ошибку, которая будет равна nil, если символ синтаксически допустим.
Второй аргумент, quote, задаёт тип анализируемого литерала и, следовательно, определяет, какая экранированная кавычка допустима. Если задана одинарная кавычка, допускается последовательность \' и запрещается неэкранированная '. Если задана двойная кавычка, допускается последовательность \" и запрещается неэкранированная ". Если задан ноль, не допускается ни одна из этих escape-последовательностей, а оба символа кавычек разрешены без экранирования.
Пример
Код:
v, mb, t, err := strconv.UnquoteChar(`\"Fran & Freddie's Diner\"`, '"')
if err != nil {
log.Fatal(err)
}
fmt.Println("value:", string(v))
fmt.Println("multibyte:", mb)
fmt.Println("tail:", t)
Вывод:
value: " multibyte: false tail: Fran & Freddie's Diner\"
type NumError
NumError описывает неудачное преобразование.
type NumError struct {
Func string // the failing function (ParseBool, ParseInt, ParseUint, ParseFloat, ParseComplex)
Num string // the input
Err error // the reason the conversion failed (e.g. ErrRange, ErrSyntax, etc.)
}
Пример
Код:
str := "Not a number"
if _, err := strconv.ParseFloat(str, 64); err != nil {
e := err.(*strconv.NumError)
fmt.Println("Func:", e.Func)
fmt.Println("Num:", e.Num)
fmt.Println("Err:", e.Err)
fmt.Println(err)
}
Вывод:
Func: ParseFloat Num: Not a number Err: invalid syntax strconv.ParseFloat: parsing "Not a number": invalid syntax
func (*NumError) Error
func (e *NumError) Error() string
func (*NumError) Unwrap 1.14
func (e *NumError) Unwrap() error
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/strconv/