string to []int golang
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
a := "1 2 3 4 5 6"
var lol []int
for _, v := range strings.Split(a, " ") {
num, _ := strconv.Atoi(v)
lol = append(lol, num)
}
fmt.Println(lol)
}
есть ли более короткий способ?, скажем как в питоне:
a = '1 2 3 4 5 6'
lol = list(map(int, a.split()))
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Из коробки в Golang нет пакетов для функционального программирования.
На коленке получилось вот что склепать
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
a := "1 2 3 4 5 6"
lol, _ := TransformE(strings.Split(a, " "), strconv.Atoi)
fmt.Println(lol)
}
func TransformE[T any, U any](input []T, operator func(T) (U, error)) ([]U, error) {
result := make([]U, len(input))
var err error
for i, t := range input {
result[i], err = operator(t)
if err != nil {
return nil, err
}
}
return result, nil
}
Можно добавить трансформатор без ошибки
func Transform[T any, U any](input []T, operator func(T) U) []U {
result := make([]U, len(input))
for i, t := range input {
result[i] = operator(t)
}
return result
}
До кучи добавить фильтрацию
func Keep[T any](input []T, operator func(T) bool) []T {
result := []T{}
for _, t := range input {
if operator(t) {
result = append(result, t)
}
}
return result
}
func KeepE[T any](input []T, operator func(T) (bool, error)) ([]T, error) {
result := []T{}
for _, t := range input {
v, err := operator(t)
if err != nil {
return nil, err
}
if v {
result = append(result, t)
}
}
return result, nil
}
и редукцию...
Можно много что написать, но это будет уже другая история.
Отвечая же на ваш вопрос - можно как в Python, но не средствами стандартной библиотеки.