Qual é o valor "zero" para time.Time in Go?

157

Em uma condição de erro, tentei retornar nil, o que gera o erro:

cannot use nil as type time.Time in return argument

Qual é o zerovalor time.Time?

Mingyu
fonte
30
E você pode usar IsZero()para detectar o tempo zero.
Matt

Respostas:

156

Invocar um time.Timeliteral de estrutura vazio retornará a data zero de Go. Assim, para a seguinte declaração de impressão:

fmt.Println(time.Time{})

A saída é:

0001-01-01 00:00:00 +0000 UTC

Por uma questão de exaustividade, a documentação oficial declara explicitamente:

O valor zero do tipo Time é 1 de janeiro de ano 1, 00: 00: 00.000000000 UTC.

zeantsoi
fonte
7
"Não passar argumentos" soa como uma chamada de função. É um literal de estrutura sem campos especificados. X {} é o valor zero da estrutura X para qualquer X.
Russ Cox
1
@RussCox Eu não acho que isso seja verdade. No meu caso, eu tenho um campo de time.Time na minha estrutura que possui o atributo 'omitempty'. Se eu não definir esse valor, ele será definido automaticamente como 0001-01-01 00:00:00 +0000 UTC em vez de ser ignorado.
Gaurav Ojha
303

Você deve usar a função Time.IsZero ():

func (Time) IsZero

func (t Time) IsZero() bool
IsZero reports whether t represents the zero time instant, January 1, year 1, 00:00:00 UTC.
gextra
fonte
De fato, se comparar se o valor dado para o tempo é nulo ou não, é isso que realmente deve ser usado.
Gaurav Ojha
7
Embora essa seja a resposta correta para comparação, o OP não perguntou sobre comparação, mas como inicializar o valor zero. A resposta aceita está correta.
Mikijov 07/04/19