Тип time.ParseError
Тип time.ParseError представляет ошибку, которая возникает при попытке разобрать строку времени с помощью функций time.Parse или time.ParseInLocation. Он содержит информацию о том, что пошло не так: ожидаемый формат, фактическая строка и позиция ошибки. Это позволяет разработчику точно определить причину неудачного разбора.
Структура типа
Тип time.ParseError имеет следующую структуру:
type ParseError struct {
Layout string
Value string
LayoutElem string
ValueElem string
msg string
}
Поле Layout содержит ожидаемый формат разбора, Value - разбираемую строку, LayoutElem - элемент формата, на котором произошла ошибка, а ValueElem - соответствующий элемент строки, вызвавший ошибку.
Синтаксис
Тип time.ParseError не создается напрямую, а возвращается функциями разбора времени при неудаче. Обработка ошибки выполняется стандартным образом через проверку error:
_, err := time.Parse(layout, value)
if err != nil {
// обработка ошибки
}
Пример
Давайте попробуем разобрать строку времени с неправильным форматом:
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02"
value := "2023-13-01"
_, err := time.Parse(layout, value)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
"parsing time \"2023-13-01\" as \"2006-01-02\": cannot parse \"13-01\" as \"01\""
Ошибка сообщает, что разбор строки "2023-13-01" по формату "2006-01-02" не удался, потому что значение "13" не может быть разобрано как месяц.
Пример
Рассмотрим обработку ошибки с извлечением деталей через приведение типа:
package main
import (
"fmt"
"time"
)
func main() {
layout := "15:04:05"
value := "25:60:00"
_, err := time.Parse(layout, value)
if parseErr, ok := err.(*time.ParseError); ok {
fmt.Printf("Layout: %s\n", parseErr.Layout)
fmt.Printf("Value: %s\n", parseErr.Value)
fmt.Printf("LayoutElem: %s\n", parseErr.LayoutElem)
fmt.Printf("ValueElem: %s\n", parseErr.ValueElem)
fmt.Printf("Error: %s\n", parseErr.Error())
}
}
Результат выполнения кода:
"Layout: 15:04:05"
"Value: 25:60:00"
"LayoutElem: 15"
"ValueElem: 25"
"Error: parsing time \"25:60:00\" as \"15:04:05\": cannot parse \"25\" as \"15\""
Приведение типа позволяет получить доступ к отдельным полям ошибки, что помогает точно определить, какой элемент вызвал проблему.
Пример
Попробуем разобрать пустую строку времени:
package main
import (
"fmt"
"time"
)
func main() {
layout := time.RFC3339
value := ""
_, err := time.Parse(layout, value)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
"parsing time \"\" as \"2006-01-02T15:04:05Z07:00\": cannot parse \"\" as \"2006\""
Ошибка указывает, что не удалось разобрать пустую строку, так как ожидается год в формате "2006".
Смотрите также
-
функцию
time.Parse,
которая разбирает строку времени по указанному формату -
функцию
time.ParseInLocation,
которая разбирает строку времени с учетом временной зоны -
функцию
time.Now,
которая возвращает текущее время -
тип
time.Time,
который представляет момент времени