go - 如何优雅地使切片附加安全
问题描述
slice := []int{10, 20, 30, 40, 50,60}
newSlice := slice[2:4:5]
fmt.Printf("old slice is %d \n", slice)
fmt.Printf("new slice is %d \n", newSlice)
newSlice = append(newSlice,70)
fmt.Printf("old slice is %d \n", slice)
fmt.Printf("new slice is %d \n", newSlice)
newSlice = append(newSlice,80)
fmt.Printf("old slice is %d \n", slice)
fmt.Printf("new slice is %d \n", newSlice)
输出将是
old slice is [10 20 30 40 50 60]
new slice is [30 40]
old slice is [10 20 30 40 70 60]
new slice is [30 40 70]
old slice is [10 20 30 40 70 60]
new slice is [30 40 70 80]
追加具有不同的行为。我知道导致追加具有不同行为的原因。因为当新切片容量大于长度时新旧共享数组,但是追加80,容量不够大,所以创建一个新数组。所以检查容量将避免追加有不同的行为,或者我可以定义新切片newSlice := slice[2:4:4]
有什么优雅的解决方案吗?因为每次追加前检查有点难看,而且在某些情况下,我希望新旧可以一直共享切片。如何让它优雅地发生?
解决方案
推荐阅读
- r - R - if (order[7] > 1 & sum(order[4:6]) > 0) 结果 <- paste(result, : 参数长度为零)
- php - 运行 phpmyadmin 时出现奇怪的错误
- mapkit - iOS12 Beta MapKit 问题:在 didSelect 方法中更改注释标题
- c# - 使用 MailKit 检查 imap 文件夹是否存在
- powershell - 在Powershell中将制表符分隔的文本转换为没有CR的CSV
- python - Python 代码不起作用 - 为什么?
- javascript - 正文没有用 reactjs/react-bootstrap 覆盖整个页面
- android - 无法从 Dagger(Android)中的 Fragment 组件访问 Activity 组件
- c++ - 如何将 OutputDebugString 与 std::string 一起使用?
- javascript - JS文件没有加载?