code: func DoWithTimeout (src, dst string, timeout time.Duration) (diffs []diffmatchpatch.Diff) {
  	dmp := diffmatchpatch.New()
  	dmp.DiffTimeout = timeout
  	wSrc, wDst, warray := dmp.DiffLinesToRunes(src, dst)
  	diffs = dmp.DiffMainRunes(wSrc, wDst, false)
  	diffs = dmp.DiffCharsToLines(diffs, warray)
  	return diffs
  }
docs: // DoWithTimeout computes the (line oriented) modifications needed to turn the src
  // string into the dst string. The `timeout` argument specifies the maximum
  // amount of time it is allowed to spend in this function. If the timeout
  // is exceeded, the parts of the strings which were not considered are turned into
  // a bulk delete+insert and the half-baked suboptimal result is returned at once.
  // The underlying algorithm is Meyers, its complexity is O(N*d) where N is
  // min(lines(src), lines(dst)) and d is the size of the diff.