@raiboon

Как проверить объект на пустоту?

Довольно обычная ситуация для скриптового языка, но не понятно как решить в го:
var previousDate time.Time
...
date, err := time.Parse(dateLayout, dateStr)
...
if previousDate == nil { // ошибка здесь
		previousDate = date
} else {
		...
}

Ошибка: cannot convert nil to type time.Time
Непонятно почему . Как реализовать проверку на то, инициализирвоана переменная или нет?
  • Вопрос задан
  • 7221 просмотр
Решения вопроса 3
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Про инициализацию в общем случае все верно уже написали, а в частном time.Time у вас есть
if previousDate.IsZero() {
Ответ написан
Комментировать
artem_kovardin
@artem_kovardin
nil - это для указателя на объект
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
У golang отсутствует понятие пустота как таковое (никаких null). Даже nil для случая указателя - это указательна 0-ую область памяти.

По сути можете сравнивать со значением структуры Time по умолчанию, хотя особого смысла в этом нет. Лучше делайте проверку ошибки, она может указывать на nil. В противном случае - дата не верна.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lerg
@Lerg
Defold, Corona, Lua, GameDev
В Go все переменные инициализируются, поэтому время не nil/null, а нулевое - 0 часов, 0 минут, 0 секунд первого дня нашей эры.
Для проверки на ноль достаточно создать ещё одну нулевую переменную и сравнивать с ней
https://play.golang.org/p/veMgZPPowh
package main

import (
	"time"
	"fmt"
)

func main() {
	var previousDate time.Time
	var zeroTime time.Time
	if previousDate == zeroTime {
		fmt.Println("Is Zero")
	}
	fmt.Println(previousDate)
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы