func AppendDuration(b []byte, d time.Duration) []byte {
	// Largest time is 2540400h10m10.000000000s
	var buf [32]byte
	w := len(buf)

	u := uint64(d)
	neg := d < 0
	if neg {
		u = -u
	}

	if u < uint64(time.Second) {
		// Special case: if duration is smaller than a second,
		// use smaller units, like 1.2ms
		var prec int
		w--
		buf[w] = 's'
		w--
		switch {
		case u == 0:
			return append(b, '0', 's')
		case u < uint64(time.Microsecond):
			// print nanoseconds
			prec = 0
			buf[w] = 'n'
		case u < uint64(time.Millisecond):
			// print microseconds
			prec = 3
			// U+00B5 'µ' micro sign == 0xC2 0xB5
			w-- // Need room for two bytes.
			copy(buf[w:], "µ")
		default:
			// print milliseconds
			prec = 6
			buf[w] = 'm'
		}
		w, u = fmtFrac(buf[:w], u, prec)
		w = fmtInt(buf[:w], u)
	} else {
		w--
		buf[w] = 's'

		w, u = fmtFrac(buf[:w], u, 9)

		// u is now integer seconds
		w = fmtInt(buf[:w], u%60)
		u /= 60

		// u is now integer minutes
		if u > 0 {
			w--
			buf[w] = 'm'
			w = fmtInt(buf[:w], u%60)
			u /= 60

			// u is now integer hours
			// Stop at hours because days can be different lengths.
			if u > 0 {
				w--
				buf[w] = 'h'
				w = fmtInt(buf[:w], u)
			}
		}
	}

	if neg {
		w--
		buf[w] = '-'
	}

	return append(b, buf[w:]...)
}
func AppendDuration(b []byte, d time.Duration) []byte {
	
	var buf [32]byte
	w := len(buf)

	u := uint64(d)
	neg := d < 0
	if neg {
		u = -u
	}

	if u < uint64(time.Second) {
		
		
		var prec int
		w--
		buf[w] = 's'
		w--
		switch {
		case u == 0:
			return append(b, '0', 's')
		case u < uint64(time.Microsecond):
			
			prec = 0
			buf[w] = 'n'
		case u < uint64(time.Millisecond):
			
			prec = 3
			
			w-- 
			copy(buf[w:], "µ")
		default:
			
			prec = 6
			buf[w] = 'm'
		}
		w, u = fmtFrac(buf[:w], u, prec)
		w = fmtInt(buf[:w], u)
	} else {
		w--
		buf[w] = 's'

		w, u = fmtFrac(buf[:w], u, 9)

		
		w = fmtInt(buf[:w], u%60)
		u /= 60

		
		if u > 0 {
			w--
			buf[w] = 'm'
			w = fmtInt(buf[:w], u%60)
			u /= 60

			
			
			if u > 0 {
				w--
				buf[w] = 'h'
				w = fmtInt(buf[:w], u)
			}
		}
	}

	if neg {
		w--
		buf[w] = '-'
	}

	return append(b, buf[w:]...)
}
func AppendDuration ( b [ ] byte , d time . Duration ) [ ] byte { // Largest time is 2540400h10m10.000000000s var buf [ 32 ] byte w := len ( buf ) u := uint64 ( d ) neg := d < 0 if neg { u = - u } if u < uint64 ( time . Second ) { // Special case: if duration is smaller than a second, // use smaller units, like 1.2ms var prec int w -- buf [ w ] = 's' w -- switch { case u == 0 : return append ( b , '0' , 's' ) case u < uint64 ( time . Microsecond ) : // print nanoseconds prec = 0 buf [ w ] = 'n' case u < uint64 ( time . Millisecond ) : // print microseconds prec = 3 // U+00B5 'µ' micro sign == 0xC2 0xB5 w -- // Need room for two bytes. copy ( buf [ w : ] , " ) default : // print milliseconds prec = 6 buf [ w ] = 'm' } w , u = fmtFrac ( buf [ : w ] , u , prec ) w = fmtInt ( buf [ : w ] , u ) } else { w -- buf [ w ] = 's' w , u = fmtFrac ( buf [ : w ] , u , 9 ) // u is now integer seconds w = fmtInt ( buf [ : w ] , u % 60 ) u /= 60 // u is now integer minutes if u > 0 { w -- buf [ w ] = 'm' w = fmtInt ( buf [ : w ] , u % 60 ) u /= 60 // u is now integer hours // Stop at hours because days can be different lengths. if u > 0 { w -- buf [ w ] = 'h' w = fmtInt ( buf [ : w ] , u ) } } } if neg { w -- buf [ w ] = '-' } return append ( b , buf [ w : ] ... ) }
// AppendDuration appends a human-readable representation of d to b.
//
// The function copies the implementation of time.Duration.String but prevents
// Go from making a dynamic memory allocation on the returned value.
AppendDuration appends a human - readable representation of d to b . The function copies the implementation of time . Duration . String but prevents Go from making a dynamic memory allocation on the returned value .