Go Package time: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(23 intermediate revisions by the same user not shown)
Line 4: Line 4:
=Internal=
=Internal=
* [[Go_Language_Modularization#time|Standard library]]
* [[Go_Language_Modularization#time|Standard library]]
* [[Time, Date, Timestamp in Go]]


=Overview=
=Overview=
Line 22: Line 23:
Other available time units: <code>time.Milliseconds</code>.
Other available time units: <code>time.Milliseconds</code>.


=<tt>Now()</tt>=
=<tt>time.Now()</tt>=
Return the current local time as an instance of a <code>[[#Time|Time]]</code> struct.
Return the current local time as an instance of a <code>[[#Time|Time]]</code> struct.
<syntaxhighlight lang='go'>
t0 := time.Now()
</syntaxhighlight>
=<tt>time.Since()</tt>=


=<tt>Time</tt>=
=<tt>Time</tt>=
A time structure.
A time structure that represents an instant in time with nanosecond precision.
 
==<tt>sec()</tt>==
==<tt>sec()</tt>==
Return seconds since Jan 1 year 1.
Return seconds since Jan 1 year 1.
Line 34: Line 41:
==<tt>After(Duration)</tt>==
==<tt>After(Duration)</tt>==
The <code>After()</code> returns a channel that will provide a Time instance after the given duration elapses. Equivalent with <code>NewTimer(d).C</code>.
The <code>After()</code> returns a channel that will provide a Time instance after the given duration elapses. Equivalent with <code>NewTimer(d).C</code>.
The function can be used with a <code>select</code> statement to [[Go_Channels#Timing_Out_select|time out the <code>select</code> statement]] if none of the participating channels ever unblock. It does that by returning a [[Go_Channels#Overview|channel]] what will send the current time after the provided duration.
=<tt>Duration</tt>=
The duration can be specified as "ns", "us" (or "µs"), "ms", "s", "m", "h".
Compute elapsed time (duration):
<syntaxhighlight lang='go'>
t0 := time.Now()
duration := time.Now().Sub(t0) // in milliseconds
</syntaxhighlight>
=<tt>Ticker</tt>=
A <code>Ticker</code> holds a channel that delivers "ticks" of a clock at intervals.
==<tt>NewTicker()</tt>==
<code>NewTicker()</code> returns a new <code>[[#Ticker|Ticker]]</code> containing a channel that will send the current time on the channel after each tick. The period of the ticks is specified by the duration argument. The ticker will adjust the time interval or drop ticks to make up for slow receivers. Stop the ticker to release associated resources.
==<tt>Tick</tt>==
<font color=darkkhaki>
<code>Tick</code> is a convenience wrapper for [[#NewTicker()|NewTicker]] providing access to the ticking channel only. While <code>Tick</code> is useful for clients that have no need to shut down the Ticker, be aware that without a way to shut it down the underlying Ticker cannot be recovered by the garbage collector; it "leaks". Unlike NewTicker, Tick will return nil if d <= 0.
</font>
=Functions=
==<tt>AfterFunc()</tt>==
=Formatting=
<font color=darkkhaki>
TODO:
<syntaxhighlight lang='go'>
time.Now().Format("03:04 AM")
</syntaxhighlight>
</font>
=Idioms=
==A Clock that Does Something Every Second==
<syntaxhighlight lang='go'>
for range time.Tick(1 * time.Second) {
  fmt.Printf(".\n")
}
</syntaxhighlight>
==Timestamp==
<syntaxhighlight lang='go'>
timestamp := time.Now().Unix()
</syntaxhighlight>

Latest revision as of 21:06, 5 April 2024

External

Internal

Overview

  • time.After returns a channel that after the given duration, will send current time on it. This can be used to implement a timeout with select.

time.Sleep()

https://golang.org/pkg/time/#Sleep

Sleep pauses the current goroutine for at least the duration d. A negative or zero duration causes Sleep to return immediately:

import "time"
...
secs := 10
time.Sleep(time.Duration(secs) * time.Second)

Other available time units: time.Milliseconds.

time.Now()

Return the current local time as an instance of a Time struct.

t0 := time.Now()

time.Since()

Time

A time structure that represents an instant in time with nanosecond precision.

sec()

Return seconds since Jan 1 year 1.

UnixNano()

Return the number of nanoseconds elapsed since January 1, 1970 UTC, represented on 8 bytes (int64). The result does not depend on the location associated with the time instance the method was called on.

After(Duration)

The After() returns a channel that will provide a Time instance after the given duration elapses. Equivalent with NewTimer(d).C.

The function can be used with a select statement to time out the select statement if none of the participating channels ever unblock. It does that by returning a channel what will send the current time after the provided duration.

Duration

The duration can be specified as "ns", "us" (or "µs"), "ms", "s", "m", "h".

Compute elapsed time (duration):

t0 := time.Now()
duration := time.Now().Sub(t0) // in milliseconds

Ticker

A Ticker holds a channel that delivers "ticks" of a clock at intervals.

NewTicker()

NewTicker() returns a new Ticker containing a channel that will send the current time on the channel after each tick. The period of the ticks is specified by the duration argument. The ticker will adjust the time interval or drop ticks to make up for slow receivers. Stop the ticker to release associated resources.

Tick

Tick is a convenience wrapper for NewTicker providing access to the ticking channel only. While Tick is useful for clients that have no need to shut down the Ticker, be aware that without a way to shut it down the underlying Ticker cannot be recovered by the garbage collector; it "leaks". Unlike NewTicker, Tick will return nil if d <= 0.

Functions

AfterFunc()

Formatting

TODO:

time.Now().Format("03:04 AM")

Idioms

A Clock that Does Something Every Second

for range time.Tick(1 * time.Second) {
  fmt.Printf(".\n")
}

Timestamp

timestamp := time.Now().Unix()