Go语言生成元素值为原slice2倍的新数组,代码错误问题求解
代码问题分析
- 切片初始化语法错误:
var newArray = []string是非法声明语法,声明空字符串切片应写为var newArray []string,也可以提前预分配和原数组等长的容量提升性能:newArray := make([]string, 0, len(myArray)) - 类型不匹配错误:原数组存储的是字符串类型,Go语言不支持直接对字符串做乘法运算,需要先将字符串转为整型,计算2倍结果后再转回字符串类型
- 切片赋值逻辑错误:
newArray = newArray[i] * 2属于完全错误的赋值写法,你需要将计算后的新元素追加到newArray中,应该使用append方法,或提前给newArray分配和原数组相同的长度后对下标位置直接赋值 - 缺少依赖包导入:代码中调用了
fmt.Println,但没有在代码开头导入fmt包,会触发编译错误
修复后可运行代码
package main import ( "fmt" "strconv" ) func main() { myArray := []string{"1", "2", "3"} // 预分配和原数组等长的容量,避免append时动态扩容开销 newArray := make([]string, 0, len(myArray)) for _, v := range myArray { // 字符串转整型 num, err := strconv.Atoi(v) if err != nil { // 转换失败时的兜底逻辑,可按需调整 newArray = append(newArray, "") continue } // 计算2倍后转回字符串存入新切片 newArray = append(newArray, strconv.Itoa(num*2)) } fmt.Println(newArray) }
内容的提问来源于stack exchange,提问作者alice_morgan
相关产品推荐
相关产品推荐

