with tutorial scraping scrap examples code go type-conversion idioms rune

go - tutorial - Convertir runa a int?



web scraping python (2)

En el siguiente código, recorro una runa por runa, pero en realidad necesito un int para realizar un cálculo de suma de comprobación. ¿Realmente necesito codificar la rune en un []byte , luego convertirla en una string y luego usar Atoi para obtener un int de la rune ? ¿Es esta la forma idiomática de hacerlo?

// The string `s` only contains digits. var factor int for i, c := range s[:12] { if i % 2 == 0 { factor = 1 } else { factor = 3 } buf := make([]byte, 1) _ = utf8.EncodeRune(buf, c) value, _ := strconv.Atoi(string(buf)) sum += value * factor }

En el patio de recreo: http://play.golang.org/p/noWDYjn5rJ


El problema es más simple de lo que parece. Convierte un valor de rune en un valor int(r) con int(r) . Pero su código implica que desea que el valor entero salga de la representación ASCII (o UTF-8) del dígito, que puede obtener de forma trivial con r - ''0'' como rune , o int(r - ''0'') como int . Tenga en cuenta que las runas fuera de rango dañarán esa lógica.


Por ejemplo, sum += (int(c) - ''0'') * factor ,

package main import ( "fmt" "strconv" "unicode/utf8" ) func main() { s := "9780486653556" var factor, sum1, sum2 int for i, c := range s[:12] { if i%2 == 0 { factor = 1 } else { factor = 3 } buf := make([]byte, 1) _ = utf8.EncodeRune(buf, c) value, _ := strconv.Atoi(string(buf)) sum1 += value * factor sum2 += (int(c) - ''0'') * factor } fmt.Println(sum1, sum2) }

Salida:

124 124