我正在玩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)
从我的观点来看,由于所有显式类型转换,上限值的计算似乎不必要复杂.
谢谢!
转换[]int8为字符串的最佳方式(最快的性能)是什么?
对于[]byte我们可以做string(byteslice),但[]int8它给出了一个错误:
cannot convert ba (type []int8) to type string
Run Code Online (Sandbox Code Playgroud)
我得到了ba来自SliceScan()的方法*sqlx.Rows产生[]int8的,而不是string
这个解决方案最快吗?
func B2S(bs []int8) string {
ba := []byte{}
for _, b := range bs {
ba = append(ba, byte(b))
}
return string(ba)
}
Run Code Online (Sandbox Code Playgroud)
编辑我的坏,它uint8不是int8..所以我可以string(ba)直接做.
我在 go 中有 4 个浮点值(startLat,startLon,endLat,endLon)。我想将这些值附加(替换)到下面的字符串中:
var etaString = []byte(`{"start_latitude":"` + startLat + `","start_longitude":"` + startLon + `","end_latitude":"` + endLat + `","end_longitude":"` + endLon }`)
Run Code Online (Sandbox Code Playgroud)
在这样做之前,我必须将它们类型转换为字符串。
startLat := strconv.FormatFloat(o.Coordinate.Longitude, 'g', 1, 64)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我得到这些参数的值,"4e+01 -1e+02 4e+01 -1e+02"
但我只想要这样的东西: "64.2345" 。
我怎样才能做到这一点?TIA :)
Golang 有strconv库,可以将字符串转换为 int64 和 uint64。
但是,其余的整数数据类型似乎不受支持,因为我找不到 byte、int16、uint16、int32、uint32 数据类型的转换函数。
人们总是可以在不损失精度的情况下从字节、16 位和 32 位数据类型转换为 int64 和 uint64。这是语言的本意吗?
https://github.com/tarm/serial/blob/master/serial.go#L103
type StopBits byte
type Parity byte
type Config struct {
Name string
Baud int
ReadTimeout time.Duration
Size byte
Parity Parity
StopBits StopBits
}
Run Code Online (Sandbox Code Playgroud)
我试图标记命令行并填写配置结构但我无法弄清楚如何从int或字符串转到单个字节?
示例大小7
试着
mysize := "7"
mysize[0]
Run Code Online (Sandbox Code Playgroud)
但是后来tarm/serial告诉我serial.Config中输入错误无效
i, err := strconv.Atoi("7")
Run Code Online (Sandbox Code Playgroud)
编译器抱怨我做不到 i.(byte)
我能使其工作的唯一方法是size: 7在config结构中进行硬编码.
当将float转换为int时,将舍弃小数。什么是干净的转换方法,以便将其舍入到最接近的整数。
x := int(3.6)
应该等于4而不是3。
我在网上发布了一个rune()在golang 中使用该功能的功能,但我很难查找它是什么.我正在阅读教程,对文档缺乏经验,因此很难找到我要找的东西.
具体来说,我试图了解为什么这会失败......
fmt.Println(rune("foo"))
Run Code Online (Sandbox Code Playgroud)
而这不是
fmt.Println([]rune("foo"))
Run Code Online (Sandbox Code Playgroud) 我真的以为这很简单:
string(myInt)
Run Code Online (Sandbox Code Playgroud)
似乎没有。
我正在编写一个函数,该函数需要一个int切片,并将每个int附加到字符串中,并在每个int之间添加分隔符。这是我的代码。
func(xis *Int16Slice) ConvertToStringWithSeparator(separator string) string{
var buffer bytes.Buffer
for i, value := range *xis{
buffer.WriteString(string(value))
if i != len(*xis) -1 {
buffer.WriteString(separator)
}
}
return buffer.String()
}
Run Code Online (Sandbox Code Playgroud)
请阅读下面的句子。这不是如何在Go中将int值转换为字符串的重复项?-因为:我知道诸如strconv.Itoa函数之类的东西,但似乎只能在“常规” int上使用。它不支持int16
我想解组string包含JSON的内容,但是该Unmarshal函数需要[]byte输入.
如何将我的UTF8转换string为[]byte?