From: Cholerae Hu Date: Fri, 3 Aug 2018 06:49:47 +0000 (+0800) Subject: net/mail: lazily initialize dateLayouts X-Git-Tag: go1.12beta1~1346 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=39eda0dac12a53f7f0c3189e5929d171e8e0b844;p=gostls13.git net/mail: lazily initialize dateLayouts Saves 6KB of memory in stdlib packages. Updates #26775 Change-Id: I1a6184cefa78e9a3c034fa84506fdfe0fec27add Reviewed-on: https://go-review.googlesource.com/127736 Reviewed-by: Brad Fitzpatrick --- diff --git a/src/net/mail/message.go b/src/net/mail/message.go index 5912b90334..554377aa1d 100644 --- a/src/net/mail/message.go +++ b/src/net/mail/message.go @@ -26,6 +26,7 @@ import ( "mime" "net/textproto" "strings" + "sync" "time" "unicode/utf8" ) @@ -65,9 +66,12 @@ func ReadMessage(r io.Reader) (msg *Message, err error) { // Layouts suitable for passing to time.Parse. // These are tried in order. -var dateLayouts []string +var ( + dateLayoutsBuildOnce sync.Once + dateLayouts []string +) -func init() { +func buildDateLayouts() { // Generate layouts based on RFC 5322, section 3.3. dows := [...]string{"", "Mon, "} // day-of-week @@ -93,6 +97,7 @@ func init() { // ParseDate parses an RFC 5322 date string. func ParseDate(date string) (time.Time, error) { + dateLayoutsBuildOnce.Do(buildDateLayouts) for _, layout := range dateLayouts { t, err := time.Parse(layout, date) if err == nil {