从strings包中学习用于处理int类型溢出的方法
用Golang发生溢出
golang中的int类型的最大值为2147483647,超过此值会发生溢出。
在动作上:
* 在定义时指定2147483647以上的值会导致编译失败
* 进行算术运算会发生溢出,但编译仍然通过。
因此,如果存在四则运算,就需要采取溢出保护措施。
从 strings.Repeat 中学习
以下是`strings.Repeat`的操作方式:
“`go
package main
import (
“fmt”
“strings”
)
func main() {
str := “Hello, 世界!”
repeatedStr := strings.Repeat(str, 3)
fmt.Println(repeatedStr)
}
“`
输出结果为:`Hello, 世界!Hello, 世界!Hello, 世界!`
请注意:为了让代码正常运行,您需要访问您提供的链接,并结合Playground环境运行代码。
这次我们来看一下标准包strings. Repeat的解决方法。
防止溢出
func Repeat(s string, count int) string {
// Since we cannot return an error on overflow,
// we should panic if the repeat will generate
// an overflow.
// See Issue golang.org/issue/16237
if count < 0 {
panic("strings: negative Repeat count")
} else if count > 0 && len(s)*count/count != len(s) {
panic("strings: Repeat count causes overflow")
}
b := make([]byte, len(s)*count)
请提供的链接显示有关Go语言中字符串相关函数的源代码。为了解释这段代码,请提供原文或相关上下文。
以下是重要的工作。
} else if count > 0 && len(s)*count/count != len(s) {
b := make([]byte, len(s)*count)
当发生溢出时,由于产生了预期之外的值(无法想出更好的措辞),len(s)*count的结果将为非预期值,因此len(s)*count/count != len(s)将成为真。
如果你看了这个链接,应该就会明白。