code: func buildPadStr(str string, padStr string, padLen int, padLeft bool, padRight bool) string {
  
  	// When padded length is less then the current string size
  	if padLen < utf8.RuneCountInString(str) {
  		return str
  	}
  
  	padLen -= utf8.RuneCountInString(str)
  
  	targetLen := padLen
  
  	targetLenLeft := targetLen
  	targetLenRight := targetLen
  	if padLeft && padRight {
  		targetLenLeft = padLen / 2
  		targetLenRight = padLen - targetLenLeft
  	}
  
  	strToRepeatLen := utf8.RuneCountInString(padStr)
  
  	repeatTimes := int(math.Ceil(float64(targetLen) / float64(strToRepeatLen)))
  	repeatedString := strings.Repeat(padStr, repeatTimes)
  
  	leftSide := ""
  	if padLeft {
  		leftSide = repeatedString[0:targetLenLeft]
  	}
  
  	rightSide := ""
  	if padRight {
  		rightSide = repeatedString[0:targetLenRight]
  	}
  
  	return leftSide + str + rightSide
  }
docs: // PadString either left, right or both sides, not the padding string can be unicode and more then one
  // character