Zaman işleme oldukça karmaşıktır. Zaman ile ilgili yaygın yanlış varsayımlar şunları içerir.
- Bir gün 24 saat içerir.
- Bir saat 60 dakikadır.
- Bir hafta yedi gün içerir.
- Bir yıl 365 gün içerir.
Örneğin, 1 belirli bir anlık zamana 24 saat eklemek her zaman yeni bir takvim gününe yol açmaz.
Bu nedenle, zamanla uğraşırken, bu yanlış varsayımları daha güvenli ve doğru bir şekilde ele almaya yardımcı olan "time"
paketini kullanın.
Anlık Zamanı Temsil Etmek İçin time.Time
Kullan
Anlık zamanla uğraşırken, karşılaştırma, zaman eklemesi veya çıkarması için time.Time
ve onun metodlarını kullanın.
Tavsiye Edilmez:
func isActive(now, start, stop int) bool {
return start <= now && now < stop
}
Tavsiye Edilen:
func isActive(now, start, stop time.Time) bool {
return (start.Before(now) || start.Equal(now)) && now.Before(stop)
}
Zaman Süreçlerini Temsil Etmek İçin time.Duration
Kullan
Zaman süreçleriyle uğraşırken, time.Duration
kullanın.
Tavsiye Edilmez:
func poll(delay int) {
for {
// ...
time.Sleep(time.Duration(delay) * time.Millisecond)
}
}
poll(10) // Saniye mi yoksa milisaniye mi?
Tavsiye Edilen:
func poll(delay time.Duration) {
for {
// ...
time.Sleep(delay)
}
}
poll(10*time
## `time.Time` ve `time.Duration`'ı Harici Sistemlerle Kullanma
Mümkün olduğu kadar, harici sistemlerle etkileşimde `time.Duration` ve `time.Time` kullanın, örneğin:
- Komut satırı bayrakları: [`flag`](https://golang.org/pkg/flag/), [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) aracılığıyla `time.Duration`'ı destekler.
- JSON: [`encoding/json`](https://golang.org/pkg/encoding/json/), [`UnmarshalJSON` yöntemi](https://golang.org/pkg/time/#Time.UnmarshalJSON) kullanarak `time.Time`'ı [RFC 3339](https://tools.ietf.org/html/rfc3339) dizesine kodlamayı destekler.
- SQL: [`database/sql`](https://golang.org/pkg/database/sql/), `DATETIME` or `TIMESTAMP` sütunlarını `time.Time`'a dönüştürür ve altta yatan sürücü tarafından destekleniyorsa geri döner.
- YAML: [`gopkg.in/yaml.v2`](https://godoc.org/gopkg.in/yaml.v2), [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) aracılığıyla `time.Time`'ı [RFC 3339](https://tools.ietf.org/html/rfc3339) dizesi olarak kullanmayı destekler.
Bu etkileşimlerde `time.Duration` kullanılamadığında, birim alanı ve `int` veya `float64` kullanın.
Örneğin, `encoding/json` `time.Duration`'ı desteklemediğinden, birim alanı alan adına dahil edilmiştir.
**Tavsiye Edilmez:**
```go
// {"interval": 2}
type Config struct {
Interval int `json:"interval"`
}
Tavsiye Edilen:
// {"intervalMillis": 2000}
type Config struct {
IntervalMillis int `json:"intervalMillis"`
}
Bu etkileşimlerde time.Time
kullanılamadığında, aksi belirtilmedikçe, string
kullanın ve zaman damgalarını RFC 3339 biçimine göre biçimlendirin. Varsayılan olarak, Time.UnmarshalText
bu formattı kullanır ve Time.Format
ve time.Parse
aracılığıyla time.RFC3339
kullanılabilir.
Pratikte bir problem olmasa da, lütfen "time"
paketinin artık saniye zaman damgalarını ayrıştırmadığını (8728) ve hesaplamalarda saniyeleri dikkate almadığını (15190) unutmayın. İki zaman arasındaki fark, o iki zaman arasında meydana gelebilecek olan ek saniyeleri içermeyecektir.