当前位置: 首页 > news >正文

百度会收录双域名的网站么龙华网站建设的软件

百度会收录双域名的网站么,龙华网站建设的软件,视频网站 费用,博客源码看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport fmtfunc main() {leaves : make([]int, 1…看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport fmtfunc main() {leaves : make([]int, 10)fmt.Println(leaves)leaves leaves[:0]fmt.Println(leaves)leaves2 : make([]int, 0, 10)fmt.Println(leaves2) }输出为: [0 0 0 0 0 0 0 0 0 0] [] []为什么不直接leaves : make([]int, 0, 10)? 况且直觉来说,先申请长度为10的,再设置为0, 比直接申请长度为0的,要多一些性能开销吧… 问了下claude.ai Go语言中leaves : make([]int, 10) leaves leaves[:0] 和leaves : make([]int, 0, 10) 有何区别哪种方式更好 这是一个很好的问题涉及到 Go 语言中切片的内存分配和使用。让我们详细比较这两种方式 方式 1: leaves : make([]int, 10) leaves leaves[:0]方式 2: leaves : make([]int, 0, 10)这两种方式的主要区别在于 初始化后的状态 方式 1初始创建一个长度为 10 的切片所有元素被初始化为零值对于 int 类型就是 0。然后立即将其长度设置为 0但保留了容量。方式 2创建一个长度为 0容量为 10 的切片。没有实际的元素被初始化。 内存分配 两种方式都会分配能容纳 10 个 int 的底层数组。 初始化开销 方式 1有初始化 10 个元素为零值的开销。方式 2没有元素初始化的开销。 使用方式 两种方式后续使用 append 的行为是一样的。 性能 方式 2 略优于方式 1因为它避免了不必要的元素初始化。 哪种方式更好 总的来说方式 2 leaves : make([]int, 0, 10) 通常被认为是更好的做法原因如下 效率避免了不必要的元素初始化特别是当元素类型比 int 更复杂时这种差异会更明显。 清晰性直接表达了我想要一个空的切片但预留了 10 个元素的空间这一意图。 一致性与后续使用 append 来添加元素的方式更加一致。 安全性避免了可能出现的、使用未被有意义初始化的元素的错误。 示例代码来说明这两种方式的行为 package mainimport fmtfunc main() {// 方式 1leaves1 : make([]int, 10)fmt.Printf(方式 1 初始: 长度%d, 容量%d\n, len(leaves1), cap(leaves1))leaves1 leaves1[:0]fmt.Printf(方式 1 重置后: 长度%d, 容量%d\n, len(leaves1), cap(leaves1))// 方式 2leaves2 : make([]int, 0, 10)fmt.Printf(方式 2: 长度%d, 容量%d\n, len(leaves2), cap(leaves2))// 添加元素leaves1 append(leaves1, 1, 2, 3)leaves2 append(leaves2, 1, 2, 3)fmt.Printf(方式 1 添加元素后: %v\n, leaves1)fmt.Printf(方式 2 添加元素后: %v\n, leaves2) }输出将会是 方式 1 初始: 长度10, 容量10 方式 1 重置后: 长度0, 容量10 方式 2: 长度0, 容量10 方式 1 添加元素后: [1 2 3] 方式 2 添加元素后: [1 2 3]这个例子展示了两种方式在实际使用中的相似性但方式 2 避免了初始的元素初始化步骤。 因此在大多数情况下leaves : make([]int, 0, 10) 是更好的选择。 看着Claude.ai的回答“第一种方式有内存分配”, 于是信心满满提了个pr,结果维护这个项目的丹麦老哥回复: It literally does the same - it doesnt save any memory overhead. Sorry. This is too pointless of a change to take. 决定做个性能测试加以佐证。 package mainimport (testing )func BenchmarkMakeWithLength(b *testing.B) {for i : 0; i b.N; i {leaves : make([]int, 10)leaves leaves[:0]} }func BenchmarkMakeWithCapacity(b *testing.B) {for i : 0; i b.N; i {leaves : make([]int, 0, 10)_ leaves} }尴尬的是测试结果却恰恰并不支持Ai给的这个结论。。 写demo然后查看两者相对应的汇编好吧其实两种写法汇编代码是完全一样的。唯一差异也就在于个人习惯和可读性了
http://www.dnsts.com.cn/news/195744.html

相关文章:

  • 江苏省网站建设哪家好公众号中微网站开发
  • 做花茶的网站宁波建设网谢家限价期房2004
  • 设计网站属于什么专业什么网站可以做模型挣钱
  • 书画展示网站模板网站seo优化包括哪些方面
  • 网站建设的市场定位分析辽宁省建设厅网站升级何时结束
  • html网站开发软件做企业网站支付功能
  • 高校门户网站建设网站建设通知书
  • 建设网站选多大的空间合适长春市招标网
  • 办公用品十大购物网站排名网站怎么做支付
  • 建设视频网站需要什么知识wordpress模板添加支付
  • 做特产网站的原因深圳禅城网站设计
  • 中英版网站怎么做没有网站没有推广如何做外贸
  • 瑞安网站建设电话正规的网站建设官网
  • 广州购物商城网站wordpress 编辑器 代码高亮
  • 甘肃省安装建设集团公司网站烟台做网站电话
  • 长沙做网站美工的公司手机软件商店下载
  • 北京建设招标信息网站开发公司五一节前安全生产工作部署会
  • 有哪些网站做二手房好的东莞网站建设-南城石佳
  • 故宫博物院官网网站咋做的移动网站网上营业厅
  • 12306网站学生做北京品牌建设网站公司排名
  • 网站详情页设计广州做网站平台的企业
  • 模板的网站都有哪些无锡网络营销推广软件
  • 公司制作网站怎么做深圳有哪些网站开发公司
  • 山东省建设银行网站网站建设好了怎么在百度可以搜到
  • 连锁租车网站源码wordpress做微信小程序
  • 网站建设策划模板下载网站开发方法 优帮云
  • 安庆跨境电商建站哪家好深圳网站建设公司有哪些内容
  • 台州网站建站服务哪家奿先备案还是先做网站
  • 建设安全员协会网站个人养老保险缴费明细
  • 广东个人 网站备案广州谷歌优化