Go - преобразовать строку, которая представляет двоичное число в int

Я написал глупое решение для этого, лучший рецепт? Как вы можете видеть много бесполезных конверсий.

package main

import (
    "fmt"
    "strconv"
    "math"
)

func conv(str string) int {
    l := len(str)
    result := 0.0
    for i,n := range str {
        number,_ := strconv.Atof64(string(n))
        result += math.Exp2(float64(l-i-1))*number
    }
    return int(result)
}

func main() {
    fmt.Println(conv("1001"))
}

Ответ 1

Вам нужна функция strconv.ParseInt, которая конвертирует из произвольной базы в заданный битовый размер.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    if i, err := strconv.ParseInt("1001", 2, 64); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(i)
    }
}

Playground

Ответ 2

Например, в Go 1,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("1101", 2, 64)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(i)
}

Вывод:

13