Can you show us the code ? It would help 

Are you trying to set a variable of type time.Location ? Or are you trying 
to set time.Local to something else ?

Like Ian said, if you want to change the location of a specific time value, 
use the In method.

> But there are lots of place that time.Location used by time package of 
golang. For example: time.Now(), time.locabs()

> I can’t change them.
I don't understand. Use time.Now() uses the time.Local variable. But all 
you need to do is wrap the setting of time.Local value with a mutex. Why is 
it not possible to do that ?




On Friday, 30 November 2018 11:31:42 UTC+5:30, Ian Lance Taylor wrote:
>
> On Thu, Nov 29, 2018 at 9:47 PM <zhangzh...@gmail.com <javascript:>> 
> wrote: 
> > 
> > My go version is 1.11. 
> > 
> > When I set time.Location, then … 
> > 
> > ================== 
> > WARNING: DATA RACE 
> > Write at 0x000002e275d0 by main goroutine: 
> >   vcs.taiyouxi.net/platform/planx/timeutil.SetTimeLocal() 
> >       /Users/zhangzhen/serverthreekingdom/src/
> vcs.taiyouxi.net/platform/planx/timeutil/time_util.go:51 +0xb4 
> >   vcs.taiyouxi.net/platform/planx/timeutil.init.0() 
> >       /Users/zhangzhen/serverthreekingdom/src/
> vcs.taiyouxi.net/platform/planx/timeutil/time_util.go:42 +0x43 
> >   vcs.taiyouxi.net/platform/planx/timeutil.init() 
> >       <autogenerated>:1 +0xd0 
> >   vcs.taiyouxi.net/jws2/common/time.init() 
> >       <autogenerated>:1 +0xa6 
> >   vcs.taiyouxi.net/jws2/gamex/account/account.init() 
> >       <autogenerated>:1 +0xa6 
> >   vcs.taiyouxi.net/jws2/gamex/logics.init() 
> >       <autogenerated>:1 +0xa6 
> >   vcs.taiyouxi.net/jws2/gamex/cmds/gamemode.init() 
> >       <autogenerated>:1 +0xa6 
> >   main.init() 
> >       <autogenerated>:1 +0xa6 
> > 
> > Previous read at 0x000002e275d0 by goroutine 8: 
> >   time.Now() 
> >       /Users/zhangzhen/.gvm/gos/go1.11/src/time/time.go:1060 +0xcf 
> >   time.sendTime() 
> >       /Users/zhangzhen/.gvm/gos/go1.11/src/time/sleep.go:141 +0x44 
> > 
> > Goroutine 8 (running) created at: 
> >   runtime.(*timersBucket).addtimerLocked() 
> >       /Users/zhangzhen/.gvm/gos/go1.11/src/runtime/time.go:170 +0x113 
> >   
> vcs.taiyouxi.net/vendor/github.com/siddontang/go/timingwheel.NewTimingWheel() 
> >       /Users/zhangzhen/serverthreekingdom/src/
> vcs.taiyouxi.net/vendor/github.com/siddontang/go/timingwheel/timingwheel.go:39
>  
> +0x2a0 
> >   vcs.taiyouxi.net/platform/planx/util.init() 
> >       /Users/zhangzhen/serverthreekingdom/src/
> vcs.taiyouxi.net/platform/planx/util/timer_helper.go:10 +0xf3 
> >   vcs.taiyouxi.net/platform/planx/metrics.init() 
> >       <autogenerated>:1 +0xbf 
> >   vcs.taiyouxi.net/jws2/gamex/cmds/gamemode.init() 
> >       <autogenerated>:1 +0x9c 
> >   main.init() 
> >       <autogenerated>:1 +0xa6 
> > ================== 
> > 
> > The feature of golang is goroutine, and it is a normal situation that 
> get time in different goroutine. 
> > But only can set time.Location in one goroutine. So the Data Race is 
> inevitable. 
> > 
> > 
> > And there is the replay from agnivade 3 
> > 
> > “It is not a bug. Please synchronize access to time.Location using 
> synchronization primitives in the sync andsync/atomic packages.” 
> > 
> > 
> > But there are lots of place that time.Location used by time package of 
> golang. For example: time.Now(), time.locabs() 
> > I can’t change them. 
> > 
> > 
> > So, What should I do ? Please help me. 
>
> You said time.Location.  Do you mean time.Local?  It's true that you 
> should never change time.Local.  Why  do you want to?  If you want to 
> change the location of a specific time.Time value, call the In method. 
>
> Ian 
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to