什么是runeGo?
我一直在谷歌搜索,但Golang只用一行说:rune是别名int32.
但是整个周围如何使用整数来交换案例?
以下是函数交换大小写.什么是<=和-?
为什么没有switch任何争论呢?
&&应该是说和,但什么是r <= 'z'?
func SwapRune(r rune) rune {
switch {
case 'a' <= r && r <= 'z':
return r - 'a' + 'A'
case 'A' <= r && r <= 'Z':
return r - 'A' + 'a'
default:
return r
}
}
Run Code Online (Sandbox Code Playgroud)
其中大多数来自http://play.golang.org/p/H6wjLZj6lW
func SwapCase(str string) string {
return strings.Map(SwapRune, str)
}
Run Code Online (Sandbox Code Playgroud)
我理解这是映射rune到string …
是否存在将bool转换为整数的内置方法,反之亦然?我尝试过普通的转换,但由于它们使用不同的底层类型,转换是不可能的经典方式.我已经倾注了一些规范,但我还没有找到答案.
我有以下代码,它应该rune投入一个string并打印出来.但是,我在打印时会得到未定义的字符.我无法弄清楚bug的位置:
package main
import (
"fmt"
"strconv"
"strings"
"text/scanner"
)
func main() {
var b scanner.Scanner
const a = `a`
b.Init(strings.NewReader(a))
c := b.Scan()
fmt.Println(strconv.QuoteRune(c))
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我string用符文迭代一个符文,但实际上我需要int执行一些校验和计算.我真的需要来编码rune成一个[]byte,然后将其转换为一个string,然后用Atoi获得的int出来的rune?这是惯用的方式吗?
// 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
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/BoZkHC8_uA
我想将uint8转换为字符串,但无法弄清楚如何.
package main
import "fmt"
import "strconv"
func main() {
str := "Hello"
fmt.Println(str[1]) // 101
fmt.Println(strconv.Itoa(str[1]))
}
Run Code Online (Sandbox Code Playgroud)
这给了我 prog.go:11: cannot use str[1] (type uint8) as type int in function argument
[process exited with non-zero status]
任何的想法?
我想在golang中将字符串转换为整数.但我不知道字符串的格式.例如,"10"- > 10,"65.0"- > 65,"xx"- > 0,"11xx" - > 11,"xx11" - > 0
我做了一些搜索并找到了strconv.ParseInt().但它无法处理"65.0".所以我必须检查字符串的格式.
有没有更好的办法?
假设我有一个int64变量(或其他整数大小)表示一个有效的unicode代码点,并且我想将它转换为Go中的符文,我该怎么办?
在CI中会使用类似的类型:
c = (char) i; // 7 bit ascii only
Run Code Online (Sandbox Code Playgroud)
但是在Go中,类型断言不起作用:
c, err = rune.( i)
Run Code Online (Sandbox Code Playgroud)
建议?
我正在玩Go,并想知道在Go中执行惯用类型转换的最佳方法是什么.基本上我的问题之间的自动类型转换中规定uint8,uint64和float64.根据我对其他语言的经验,a uint8与a 的乘法uint64将产生一个uint64值,但在go中则不然.
这是我构建的一个示例,我问这是否是编写此代码的惯用方法,或者我是否缺少重要的语言结构.
package main
import ("math";"fmt")
const(Width=64)
func main() {
var index uint32
var bits uint8
index = 100
bits = 3
var c uint64
// This is the line of interest vvvv
c = uint64(math.Ceil(float64(index * uint32(bits))/float64(Width)))
fmt.Println("Test: %v\n", c)
}
Run Code Online (Sandbox Code Playgroud)
从我的观点来看,由于所有显式类型转换,上限值的计算似乎不必要复杂.
谢谢!
Golang 有strconv库,可以将字符串转换为 int64 和 uint64。
但是,其余的整数数据类型似乎不受支持,因为我找不到 byte、int16、uint16、int32、uint32 数据类型的转换函数。
人们总是可以在不损失精度的情况下从字节、16 位和 32 位数据类型转换为 int64 和 uint64。这是语言的本意吗?
当将float转换为int时,将舍弃小数。什么是干净的转换方法,以便将其舍入到最接近的整数。
x := int(3.6)
应该等于4而不是3。
Go 允许从rune到 的转换byte。但是 for 的基础类型rune是int32(因为 Go 使用 UTF-8),并且因为byte它是uint8,因此转换会导致信息丢失。但是,无法从符文转换为[]byte.
var b byte = '©'
bs := []byte(string('©'))
fmt.Println(b)
fmt.Println(bs)
// Output
169
[194 169]
Run Code Online (Sandbox Code Playgroud)
为什么 Go 允许从runeto转换byte而不是runeto []byte?