我很好奇为什么Golang没有提供[]byte(*string)方法.从性能的角度来看,不会[]byte(string)复制输入参数并增加更多的成本(虽然这看起来很奇怪,因为字符串是不可变的,为什么要复制它们)?
我是Go的新手,非常感谢任何澄清.
在Go中生成固定长度随机数最快,最简单的方法是什么?
说要生成8位数字长的数字,问题rand.Intn(100000000)是结果可能远远少于8位数字,并且用前导零填充它对我来说似乎不是一个好答案。
即,我更关注随机性的质量,即其长度。所以我在想,对于这个特定的问题,下面的方法是最快,最简单的方法吗?
99999999 - rand.Int63n(90000000)
Run Code Online (Sandbox Code Playgroud)
即,Int63n对于我的情况,我想可能比更好Intn。是真的,还是只是一厢情愿?关于完整的8位数字的随机性,两者是否相同,或者确实有一个比另一个更好?
最后,还有什么比以上更好的方法了?
更新:
low + rand(hi-low)大家都知道,请不要提供答案。这相当于我现在正在做的事情,并且没有回答我真正的问题:“关于完整的8位数字的随机性,两者是相同的,还是真的有一个比另一个更好?”
如果没有人能够回答,我将在两者之间绘制一个二维散点图,然后找出自己...
谢谢
参考以下基准测试代码:
func BenchmarkRuneCountNoDefault(b *testing.B) {
b.StopTimer()
var strings []string
numStrings := 10
for n := 0; n < numStrings; n++{
s := RandStringBytesMaskImprSrc(10)
strings = append(strings, s)
}
jobs := make(chan string)
results := make (chan int)
for i := 0; i < runtime.NumCPU(); i++{
go RuneCountNoDefault(jobs, results)
}
b.StartTimer()
for n := 0; n < b.N; n++ {
go func(){
for n := 0; n < numStrings; n++{
<-results
}
return
}()
for n := 0; n < numStrings; …Run Code Online (Sandbox Code Playgroud) 我想解组string包含JSON的内容,但是该Unmarshal函数需要[]byte输入.
如何将我的UTF8转换string为[]byte?