Не совсем понятно, почему конвертация переменных это проблема. По-моему любая функция конвертации принимает тип данных в зависимости от её входного значения.
Для большинства случаев вы можете использовать функцию из стандартной библиотеки fmt.Sprint(i), но наиболее быстро будет работать самописная функция примерно с таким кодом:
func String(n int32) string { buf := [11]byte{} pos := len(buf) i := int64(n) signed := i < 0 if signed { i = -i } for { pos-- buf[pos], i = '0'+byte(i%10), i/10 if i == 0 { if signed { pos-- buf[pos] = '-' } return string(buf[pos:]) } } }
fmt.Sprint(i) функция будет работать, но сравнительно медленно. К примеру в коде:
func Sprint(a ...interface{}) string { p := newPrinter() p.doPrint(a) s := string(p.buf) p.free() return s }
Если нужно получить результат быстрее используйте лучше strconv.Itoa(int(i))
func Itoa(i int) string { return FormatInt(int64(i), 10) }
Как еще более быстрый вариант, могу предложить юзать strconv.FormatInt(int64(i), 10). Пример использования в таком вот коде:
func FormatInt(i int64, base int) string { _, s := formatBits(nil, uint64(i), base, i < 0, false) return s }
Как вы видите из ответов выше, смену типа данных в зависимости от входной переменной и использования различных функций можно осуществлять по-разному.
В зависимости от того, что вы выберете, может меняться быстродействие кода.
Довольно показательный пример использование различных функций на 50000000 итераций:
s = String(i) время исполнения: 5.5923198 сек
s = String2(i) время исполнения: 5.5923199 сек
s = strconv.FormatInt(int64(i), 10) время исполнения: 5.9133382 сек
s = strconv.Itoa(int(i)) время исполнения: 5.9763418 сек
s = fmt.Sprint(i) время исполнения: 13.5697761 сек