code: func Id() string {
  	// lock for lastTime, lastRand, and chars
  	mu.Lock()
  	defer mu.Unlock()
  
  	now := time.Now().UTC().UnixNano()
  	var r int64
  
  	// if we have the same time, just inc lastRand, else create a new one
  	if now == lastTime {
  		lastRand++
  	} else {
  		lastRand = rand.Int63()
  	}
  	r = lastRand
  
  	// remember this for next time
  	lastTime = now
  
  	nowStr := strconv.FormatInt(now, 10)
  	rStr := strconv.FormatInt(r, 10)
  
  	for len(rStr) < 19 {
  		rStr = "0" + rStr
  	}
  
  	return nowStr + "-" + rStr
  }
docs: // Id returns a 23 char string based on timestamp and a random number. The format is "XXXXXXXXXXX-YYYYYYYYYYY" where X
  // is the timestamp and Y is the random number. If (by any chance) this is called in the same nanosecond, the random
  // number is incremented instead of a new one being generated. This makes sure that two consecutive Ids generated in
  // the same goroutine also ensure those Ids are also sortable.
  //
  // It is safe to call from different goroutines since it has it's own locking.