显示标签为“slice”的博文。显示所有博文
显示标签为“slice”的博文。显示所有博文

2018年4月19日星期四

golang slice函数值传递的“隐患”

    直接上现场,看看你能不能一眼识破“隐患”根因!

    下文函数基本功能是针对一个分片silce的数据,设置将前toCount个数据更新为100以内随机数,如果toCount大于当前的slice总长度,则扩大到toCount大小并填满100以内的随机数。
    代码如下:
package main
import ( "fmt" "math/rand")
func getRand() int {
return rand.Int() % 100
}
func fillInRandom1(ori []int, toCount int) {
fillInRandom2(&ori, toCount)}
func fillInRandom2(ori *[]int, toCount int) {
if toCount <= len(*ori) {
for i:=0; i< toCount; i++ {
(*ori)[i] = getRand() }
} else {
for i:=0; i< len(*ori); i++ {
(*ori)[i] = getRand() }
for i:=0; i< toCount - len(*ori); i++ {
*ori = append(*ori, getRand()) }
return }
}
func printSlice(s []int) {
for _, i := range s {
fmt.Printf("%v ", i) }
fmt.Println()}
func main() {
fmt.Println("slice参数值传递效果:") nums := make([]int, 4, 5) fillInRandom1(nums, 2) printSlice(nums) fillInRandom1(nums, 4) printSlice(nums) fillInRandom1(nums, 8) printSlice(nums)
fmt.Println("slice指针传递效果:") nums = make([]int, 4, 5) fillInRandom2(&nums, 2) printSlice(nums) fillInRandom2(&nums, 4) printSlice(nums) fillInRandom2(&nums, 8) printSlice(nums)
}
输出如下: