mirror of
https://github.com/golang/go.git
synced 2025-12-07 13:50:04 +00:00
One reader pointed out that the example isn't compelling because &age would have worked just as well. This CL changes the example to use a nontrivial expression. Don't nitpick the arithmetic. For #45624 Change-Id: Icc745f5ee7000c1d3559da1388c6a5596c4d1f46 Reviewed-on: https://go-review.googlesource.com/c/go/+/714040 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Alan Donovan <adonovan@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
881 B
881 B
Changes to the language
The built-in new function, which creates a new variable, now allows
its operand to be an expression, specifying the initial value of the
variable.
This feature is particularly useful when working with serialization
packages such as encoding/json or protocol buffers that use a
pointer to represent an optional value, as it enables an optional
field to be populated in a simple expression, for example:
import "encoding/json"
type Person struct {
Name string `json:"name"`
Age *int `json:"age"` // age if known; nil otherwise
}
func personJSON(name string, born time.Time) ([]byte, error) {
return json.Marshal(Person{
Name: name,
Age: new(yearsSince(born)),
})
}
func yearsSince(t time.Time) int {
return int(time.Since(t).Hours() / (365.25 * 24)) // approximately
}