package main import ( `fmt` `strings` ) func padStr(str string, colSize uint8) (out string) { var fill int var lFill int var rFill int var strLen int = len(str) // EZPZ. Exact match. if strLen+fixedPad == int(colSize) { out = fmt.Sprintf( "%s%s%s", strings.Repeat(padChars, fixedPad/2), str, strings.Repeat(padChars, fixedPad/2), ) return } // This is where it gets... annoying. fill = int(colSize) - (strLen + fixedPad) if fill%2 == 0 { /* Split evenly left/right. This condition will be met if BOTH strLen and colSize are even, or if BOTH strLen and colSize are odd. Math! */ lFill = fill / 2 rFill = fill / 2 } else { // Either the value or the width is odd, and the other is even. // (Note: Goland automatically floors an int/int calculation's result.) // As such, asymmetrical padding is needed. if strLen%2 == 0 { /* String is even, width is odd. Favor (smaller fill) the left. */ lFill = fill / 2 rFill = (fill + 1) / 2 // This works instead of math.Ceil because dividing by 2. } else { /* String is odd, width is even. Favor right pad. */ lFill = (fill + 1) / 2 rFill = fill / 2 } } out = fmt.Sprintf( "%s%s%s", strings.Repeat(padChars, lFill+fixedPad/2), str, strings.Repeat(padChars, rFill+fixedPad/2), ) return }