@datafilterman

Проясните ситуацию с типизацией на Go?

Начал изучение Golang, попутно решив написать генератор для вывода последовательно дат. На примере стандартной либы time получился следующий скрипт

package main

import (
      "fmt"
      "time"
)

func main() {
   date := time.Date(2020,1,1,12,0,0,0,time.UTC)
   var days time.Duration = 32
   var d *time.Duration = &days
   var start time.Duration = 0
   var s *time.Duration = &start
   for *s = 0; *s < *d; *s++ {
       res := date.Add(time.Hour * 24 * *s)
       fmt.Println(res.Format("2006-01-02"))
   }
}

Гуру, можете провести code review? Есть большое непонимание типизации в Go. Пакет time содержит кучу функций с кастомными типами. Я переводил переменные к типу time.Duration с помощью указателей, и этот вариант мне показался подозрительно костыльным.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
@ghostiam
На Go писатель, серверов пинатель.
Вот верный вариант
package main

import (
	"fmt"
	"time"
)

func main() {
	date := time.Date(2020, 1, 1, 12, 0, 0, 0, time.UTC)
	var days int = 32
	var start int = 0
	for s := start; s < days; s++ {
		res := date.Add(time.Duration(s) * time.Hour * 24)
		format := res.Format("2006-01-02")
		fmt.Println(format)
	}
}

https://play.golang.org/p/Iv0DvH4OSw4

Не понимаю зачем использовать ссылку и конвертировать длительность в длительность.

Так же вы не совсем понимаете что такое time.Duration.
time.Duration - это хоть и алиас int64, но он имеет другой смысл, а именно, содержит длительность в наносекундах.

Так же я бы убрал объявление типов, они тут излишнее, то есть, переменные можно объявить как:
var days int = 32
var start int = 0
так и
days := 32
start := 0
и в большинстве случаев, вы увидите второй вариант, но есть НО, а именно, в переменные с значением по умолчанию обычно не присваивают значение, если нет сути и пишут `var start int`, (в вашем примере она есть, поэтому уместно объявить как `start := 0`)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 120 000 до 170 000 ₽
LifeStyle platform Москва
от 180 000 до 250 000 ₽
Enapter Санкт-Петербург
от 160 000 до 240 000 ₽
22 февр. 2020, в 08:13
100 руб./за проект
22 февр. 2020, в 06:44
500 руб./за проект
22 февр. 2020, в 06:32
70000 руб./за проект