From 29d53b2e35656fd9a5531fe591a50315181d93f8 Mon Sep 17 00:00:00 2001 From: Jaroslavs Samcuks Date: Tue, 8 Jun 2021 19:20:31 +0200 Subject: [PATCH] font: initialize default font once --- font.go | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/font.go b/font.go index 401143b..48a2a3d 100644 --- a/font.go +++ b/font.go @@ -7,23 +7,22 @@ import ( "github.com/wcharczuk/go-chart/v2/roboto" ) -var ( - _defaultFontLock sync.Mutex - _defaultFont *truetype.Font -) +var _defaultFont defaultFont // GetDefaultFont returns the default font (Roboto-Medium). func GetDefaultFont() (*truetype.Font, error) { - if _defaultFont == nil { - _defaultFontLock.Lock() - defer _defaultFontLock.Unlock() - if _defaultFont == nil { - font, err := truetype.Parse(roboto.Roboto) - if err != nil { - return nil, err - } - _defaultFont = font - } - } - return _defaultFont, nil + return _defaultFont.Font() +} + +type defaultFont struct { + font *truetype.Font + err error + once sync.Once +} + +func (df *defaultFont) Font() (*truetype.Font, error) { + df.once.Do(func() { + df.font, df.err = truetype.Parse(roboto.Roboto) + }) + return df.font, df.err }