开发经验:go切片的继承

package main  import (  "errors"  "fmt"  
)  // LimitedSlice 是一个封装了切片的结构体,用于限制切片的最大容量  
type LimitedSlice struct {  slice  []int  maxCap int  
}  // NewLimitedSlice 创建一个新的LimitedSlice实例,初始容量为0,最大容量为maxCap  
func NewLimitedSlice(maxCap int) *LimitedSlice {  return &LimitedSlice{  slice:  make([]int, 0, 0), // 初始时容量为0,长度也为0  maxCap: maxCap,  }  
}  // Append 尝试向切片中添加一个元素,如果添加后容量不超过最大容量,则返回nil;否则返回错误  
func (ls *LimitedSlice) Append(value int) error {  if len(ls.slice)+1 > ls.maxCap {  return errors.New("cannot append: slice capacity exceeds maximum")  }  // 如果当前容量不足以容纳新元素,则先扩容(但不超过最大容量)  if cap(ls.slice) < ls.maxCap {  ls.slice = append(ls.slice, 0) // 临时扩容,注意这里只是预留空间,并不添加实际元素  ls.slice = ls.slice[:len(ls.slice)-1] // 还原长度  }  // 现在可以安全地添加新元素了  ls.slice = append(ls.slice, value)  return nil  
}  // GetSlice 返回内部切片的视图(只读)  
func (ls *LimitedSlice) GetSlice() []int {  return ls.slice  
}  func main() {  ls := NewLimitedSlice(10)  for i := 0; i < 10; i++ {  if err := ls.Append(i); err != nil {  fmt.Println(err)  break  }  }  // 尝试添加第11个元素,应该会失败  if err := ls.Append(10); err != nil {  fmt.Println(err)  }  fmt.Println(ls.GetSlice()) // 输出: [0 1 2 3 4 5 6 7 8 9]  
}

上面的Append方法中的扩容逻辑实际上并不是必需的,因为当你尝试向切片添加元素时,如果切片当前的容量不足以容纳新元素,append函数会自动进行扩容(直到达到某个上限,这个上限由Go运行时决定,而不是由你指定的最大容量决定)。然而,由于我们在这里想要模拟一个最大容量的限制,所以我们没有让append自动扩容到超过我们指定的最大容量。但是,上面的代码示例中,Append方法中的扩容逻辑(即ls.slice = append(ls.slice, 0)和ls.slice = ls.slice[:len(ls.slice)-1])实际上并没有真正起到限制容量的作用,因为它只是临时地增加了一个空间然后又移除了它。在这个特定的例子中,你可以省略这部分逻辑,因为当append试图超过我们设定的最大容量时,len(ls.slice)+1 > ls.maxCap条件已经足够阻止进一步的添加操作了。

如果你想要一个更严格的容量限制,你可能需要完全避免使用append的自动扩容特性,并在每次添加元素时都手动检查容量。但是,这通常不是使用切片时推荐的做法,因为这会失去切片提供的大部分灵活性和便利性。相反,你可能需要重新考虑你的数据结构选择,或者接受Go切片在容量方面的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python安装或升级模块时,[WinError 5] 拒绝访问

参考&#xff1a; https://www.cnblogs.com/hyisangie/p/15154426.html 基本上遇到 Consider using the --user option… 就是需要管理员权限才能安装或更新 Windows 在命令提示符中输入 安装&#xff1a;pip install <模块名> --user # 这里的 --user 照打就行了&…

数据采集技术:selenium/正则匹配/xpath/beautifulsoup爬虫实例

专栏介绍 1.专栏面向零基础或基础较差的机器学习入门的读者朋友&#xff0c;旨在利用实际代码案例和通俗化文字说明&#xff0c;使读者朋友快速上手机器学习及其相关知识体系。 2.专栏内容上包括数据采集、数据读写、数据预处理、分类\回归\聚类算法、可视化等技术。 3.需要强…

电影解说 剪辑实战带货全新蓝海市场,电影解说实战课程(16节)

课程目录 1-影视解说自媒体带货新玩法_1.mp4 2-影视解说选品及解说规范标准_1.mp4 3-电影解说的脚本模版及流程_1.mp4 4-电影解说编写文案及爆火规律_1.mp4 5-手把手教你影视素材哪里找_1.mp4 6-影视解说剪辑、配音及创收方式_1.mp4 7-电影解说剪辑的实操课程A_1.mp4 8…

关于Ubuntu系统中.config文件夹如何找到

Ubuntu中QT项目使用了setting保存配置&#xff0c;但是找不到配置文件保存了在哪里&#xff0c;找了一下&#xff1a; 因为QT里取的名字是&#xff1a; 于是下载everything搜索Nio&#xff0c;发现目录为/home/nio/.config 虽然已经下载了everything找到了&#xff0c;但是发现…

fyne常用内置颜色

常用内置颜色 在theme包里有一个关于颜色的color.go 常用颜色如下: theme.PrimaryColor() theme.WarningColor() theme.SuccessColor() theme.ErrorColor() theme.ShadowColor() theme.HyperlinkColor()最终这些会返回color.Color接口。 效果图: theme.HyperlinkColor()和t…

图神经网络拉普拉斯矩阵理论

图拉普拉斯矩阵是谱图理论中的一个重要概念&#xff0c;它描述了一个图的结构特性&#xff0c;主要用于量化图的连通性和节点之间的关系。我们可以通过一个简单的无向图例子来说明图拉普拉斯矩阵是如何构造的。 ### 例子&#xff1a;一个无向图 假设我们有一个无向图 \(G(V,E…

VTK- 面绘制体绘制

在VTK中&#xff0c;面绘制&#xff08;Surface Rendering&#xff09;和体绘制&#xff08;Volume Rendering&#xff09;是两种常见的三维数据可视化方法。面绘制和体绘制是计算机图形学中用于三维数据可视化的重要技术&#xff0c;尤其在医学成像、科学可视化和计算机辅助设…

agx orin

Ubuntu20安装ROS2 foxy-CSDN博客 Ubuntu软件源、pip源大全&#xff0c;国内网站网址&#xff0c;阿里云、网易163、搜狐、华为、清华、北大、中科大、上交、山大、吉大、哈工大、兰大、北理、浙大_ubuntu国内源地址-CSDN博客ubuntu-ports镜像_ubuntu-ports下载地址_ubuntu-port…

Android广播机制

简介 某个网络的IP范围是192.168.0.XXX&#xff0c;子网 掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口&#xff0c;这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知&…

oh-my-zsh启动慢重新安装

在Mac上安装oh-my-zsh并设置主题实际上是一个两步过程&#xff1a;首先安装oh-my-zsh&#xff0c;然后配置你喜欢的主题。oh-my-zsh本身并不直接“安装主题”&#xff0c;而是提供了一个框架&#xff0c;让你能够轻松地更改和配置主题。主题通常是oh-my-zsh框架的一部分&#x…

平滑滚动到页面顶部?分享 1 段优质 JS 代码片段!

本内容首发于工粽号&#xff1a;程序员大澈&#xff0c;每日分享一段优质代码片段&#xff0c;欢迎关注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文约 700 字&#xff0c;整篇阅读约需 1 分钟。 今天分享一段优质 JS 代码片段&#xff0c;通过简单的逻辑…

游戏行业情报 | 手机玩3A终是空想?iOS版3A大作销量滑铁卢

2023年9月的苹果发布会上&#xff0c;苹果宣布iPhone15 Pro系列首发配备的A17 Pro芯片将能够支持3A游戏的游玩&#xff0c;随着该系列设备的发布&#xff0c;《生化危机 4》、《生化危机&#xff1a;村庄》、《死亡搁浅》和《刺客信条&#xff1a;幻景》等大作先后登陆iOS平台。…

Qt 使用 QZipReader 解压文件

Qt 使用 QZipReader 解压文件 文章目录 Qt 使用 QZipReader 解压文件摘要关于 QZipReader使用 QZipReader代码解释&#xff1a; 快速解 extractAll 关键字&#xff1a; Qt、 QZipReader、 extractAll、 Zip、 解压缩 摘要 每日一坑&#xff0c;坑坑难过&#xff0c;今日在…

2024年度 | 推荐PC端时间规划、项目管理软件(最新)

PingCode&#xff1a;适用于IT团队的项目/任务管理。 https://pingcode.com/ Worktile&#xff1a;团队通用的任务规划工具。 https://worktile.com/ Todoist&#xff1a;个人任务管理工具&#xff0c;支持跨平台同步。 Todoist | 管理您工作和生活的To Do List Pomodoro Ti…

网卡配置文件详解

详解 [rootCSDN_xiaodu ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPEEthernet # 网络类型 以太网 BOOTPROTOnone # IP地址的配置方式# none 手动配置# static 手动配置# dhcp 自动获取(不使用) NAMEeth0 # 网卡在系统中的名称 UU…

[JS]面向对象ES6

class类 ES6是基于 class关键字 创建类 <script>// 1.定义类class Person {// 公有属性name// 公有属性 (设置默认值)age 18// 构造函数constructor(name) {// 构造函数的this指向实例化对象// 构造函数的作用就是给实例对象设置属性this.name name// 动态添加属性(不…

Android选择题界面的设计——线性布局实操

目录 任务目标任务分析任务实施 任务目标 使用TextView、Button、CheckBox等实现一个选择题界面&#xff0c;界面如图1所示。 图1 选择题界面效果图 任务分析 上述界面可以分解为上下两部分&#xff0c;上面部分可以使用横向的线性布局来完成&#xff0c;下面部分可以使用…

独家带你get懂印尼直播工具APP借助海外快手kwai短视频广告推广优势

独家带你get懂印尼直播工具APP借助海外快手kwai短视频广告推广优势 随着全球互联网的迅猛发展和移动互联网的普及&#xff0c;广告投放已经成为企业扩大品牌影响力、获取潜在客户的重要手段之一。在印尼这一充满活力的市场中&#xff0c;直播工具APP的广告投放尤为关键。海外快…

快速了解 | 企业代码签名证书怎么弄

企业代码签名证书是用于签名软件、驱动程序、代码库等的数字证书&#xff0c;它能够保证软件的完整性和来源的真实性&#xff0c;从而提升用户对软件的信任度&#xff0c;消除电脑系统对于“未知发布者”软件的安装拦截和弹窗警告&#xff0c;消除微软的SmartScreen提醒。 1、…

ArmPiPro-多人同时开发

V0.0 2024.07.04 ROS节点间的通信是分布式的&#xff0c;也就是节点可以运行在不同的”主机“上&#xff0c;这些主机包括安装在机器人上的主控&#xff08;Pi4&#xff09;、通过串口连接PI4的烧写有Serialros的MCU从控、负责视觉开发的VM1、负责移动的VM2、负责机械臂的VM3都…