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

免费网站模板建站长春网站建设建站系统

免费网站模板建站,长春网站建设建站系统,iis配网站,阳山做网站知识点关键概念切片声明var slice []int初始化切片slice : []int{1,2,3}make() 创建切片make([]int, len, cap)获取长度和容量len(slice), cap(slice)追加元素slice append(slice, value)切片截取slice[start:end](返回子切片)拷贝切片copy(dest, src)&…
知识点关键概念
切片声明var slice []int
初始化切片slice := []int{1,2,3}
make() 创建切片make([]int, len, cap)
获取长度和容量len(slice), cap(slice)
追加元素slice = append(slice, value)
切片截取slice[start:end](返回子切片)
拷贝切片copy(dest, src)(不会共享底层数组)
删除元素slice = append(slice[:index], slice[index+1:]...)
nil 切片 vs 空切片nilSlice == nillen(emptySlice) == 0
切片扩容超过 cap 后,自动扩容

1. 切片的基本概念

代码示例

package mainimport "fmt"func main() {// 声明切片var slice1 []intfmt.Println(slice1) // []// 直接初始化切片slice2 := []int{1, 2, 3, 4, 5}fmt.Println(slice2) // [1 2 3 4 5]
}

学习笔记

  • 切片是一种动态数组,可以扩容,而数组长度固定。
  • 切片本质上是对底层数组的引用,它存储的是 指向底层数组的指针、长度和容量
  • 切片可以通过 {} 直接初始化,不需要指定长度。

2. 使用 make() 创建切片

代码示例

package mainimport "fmt"func main() {// 创建一个长度为 5 的切片,默认值为 0slice1 := make([]int, 5)fmt.Println(slice1) // [0 0 0 0 0]// 创建一个长度为 7,容量为 10 的切片slice2 := make([]int, 7, 10)fmt.Println(slice2)                  // [0 0 0 0 0 0 0]fmt.Println("长度:", len(slice2))    // 7fmt.Println("容量:", cap(slice2))    // 10
}

学习笔记

  • make([]type, len, cap) 用于创建切片,其中:
    • len 是切片的初始长度。
    • cap 是切片的容量(可选)。
  • len() 获取切片长度,cap() 获取切片容量
  • 切片长度 <= 容量,超过容量时会自动扩展。

3. 切片的 append() 操作

代码示例

package mainimport "fmt"func main() {slice := []string{"A", "B"}slice = append(slice, "C", "D") // 追加元素fmt.Println(slice)              // [A B C D]
}

学习笔记

  • append() 用于向切片追加元素,如果超出容量,Go 会 自动扩容 并分配新的底层数组。

4. 切片的截取

代码示例

package mainimport "fmt"func main() {slice := []int{1, 2, 3, 4, 5, 6, 7}subSlice := slice[1:4] // 从索引 1 截取到索引 4(不包含 4)fmt.Println(subSlice)  // [2 3 4]subSlice[1] = 100 // 修改 subSlice 会影响原切片fmt.Println(slice) // [1 2 100 4 5 6 7]
}

学习笔记

  • slice[start:end] 获取 [start, end) 之间的元素(不包含 end)。
  • 修改子切片的值会影响原切片,因为它们共用相同的底层数组。

5. 使用 copy() 进行切片拷贝

代码示例

package mainimport "fmt"func main() {src := []int{1, 2, 3, 4, 5}dest := make([]int, len(src))copy(dest, src) // 复制 src 到 destfmt.Println(dest) // [1 2 3 4 5]src[0] = 100fmt.Println(src)  // [100 2 3 4 5]fmt.Println(dest) // [1 2 3 4 5] (不受影响)
}

学习笔记

  • copy(dest, src) 用于复制切片,不会共享底层数组。
  • 修改 src 不会影响 dest,避免数据被误修改。

6. 切片的删除操作

代码示例

package mainimport "fmt"func main() {slice := []int{1, 2, 3, 4, 5}slice = append(slice[:2], slice[3:]...) // 删除索引 2 的元素fmt.Println(slice) // [1 2 4 5]
}

学习笔记

  • Go 没有 remove() 方法,删除元素时需要使用 append() 将前后部分拼接。
  • slice[:index] + slice[index+1:] 实现删除,需要 ... 进行解包。

7. nil 切片 vs 空切片

代码示例

package mainimport "fmt"func main() {var nilSlice []intemptySlice := []int{}if nilSlice == nil {fmt.Println("nilSlice 是 nil")}if len(emptySlice) == 0 {fmt.Println("emptySlice 是空切片")}
}

学习笔记

  • nil 切片是未分配内存的切片,值为 nil,常用于表示 “无数据”。
  • 空切片已经初始化,但 len() == 0,可以安全使用 append() 添加数据。

8. 切片扩容机制

代码示例

package mainimport "fmt"func main() {slice := []int{}fmt.Println("初始容量:", cap(slice))for i := 1; i <= 10; i++ {slice = append(slice, i)fmt.Printf("追加 %d 后,长度: %d, 容量: %d\n", i, len(slice), cap(slice))}
}

学习笔记

  • 切片的容量按 2 倍增长
    • len(slice) < cap(slice)append() 直接使用现有的底层数组。
    • 当超出 cap(slice),Go 会 重新分配内存 并扩展容量。

一、go1.18 之前:
1.如果期望容量大于当前容量的两倍就会使用期望容量;
2.如果当前切片的长度小于 1024 就会将容量翻倍;
3.如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;

二、go1.18 之后:
1.如果期望容量大于当前容量的两倍就会使用期望容量;
2.如果当前切片的长度小于阈值(默认 256)就会将容量翻倍;
3.如果当前切片的长度大于等于阈值(默认 256),就会每次增加 25% 的容量,基准是 newcap + 3*threshold,直到新容量大于期望容量;

扩容机制笔记参考自:https://blog.csdn.net/qq_47831505/article/details/135540661


文章转载自:

http://v5d2G1tL.djgrg.cn
http://dPnKyAnh.djgrg.cn
http://Q1T5FYLy.djgrg.cn
http://bGZiq54v.djgrg.cn
http://hlLhhPmF.djgrg.cn
http://YiZtgBpV.djgrg.cn
http://36VnVTUL.djgrg.cn
http://mhc2cmef.djgrg.cn
http://bdpHZpiE.djgrg.cn
http://0GhZ2f7R.djgrg.cn
http://MvaiqkH6.djgrg.cn
http://h9Ig4t05.djgrg.cn
http://oM9vXu4P.djgrg.cn
http://1j8tNDHd.djgrg.cn
http://CxjLSMtw.djgrg.cn
http://egsYDlol.djgrg.cn
http://mecDIr0o.djgrg.cn
http://aNxYzj2a.djgrg.cn
http://iHry3Bpx.djgrg.cn
http://VScfx6lC.djgrg.cn
http://JJwYFWpY.djgrg.cn
http://3zaDYhql.djgrg.cn
http://ujsyiqL9.djgrg.cn
http://kGQvnPkm.djgrg.cn
http://zHBbSnQM.djgrg.cn
http://mmP9OZ7f.djgrg.cn
http://v47FykR6.djgrg.cn
http://vMygjSyZ.djgrg.cn
http://lojp6U2B.djgrg.cn
http://Cxml5TNc.djgrg.cn
http://www.dtcms.com/wzjs/700350.html

相关文章:

  • 自助建设手机网站自己设计好的网站怎么设置访问
  • 湛江网站开发哪家专业广州网站建设 领航科技
  • 域名销售网站开发app和微网站有哪些功能
  • 建筑设计网站大全网站做网站的公司哪个好
  • 北京网站建设公司 蓝纤科技 网络服务学网页设计的课程
  • 东山网站建设自建网站主题及策划
  • 旅游公司网站建设方案html5网站开发开题报告
  • 网站做关键词做电影网站代理合法么
  • 做茶叶网站的公司卡片式设计网站制作
  • 怎么做外国网站流量购物网站设计图
  • 全球军事网站猪八戒网站建设公司
  • 网站建设经理wordpress 双主页
  • 阿里云备案成功怎么建设网站架子鼓谱那个网站做的好
  • 餐饮设计公司网站海外医疗兼职网站建设
  • 网站设计与建设实训抚顺网站推广
  • 开创云网站建设wordpress+程序优化
  • 招聘网站页面设计图片wordpress开启全站ssl
  • 物流网站的建设方案临沂网站建设排名
  • 苏州网站推广去苏州聚尚网络数字营销传播
  • 网站域名及空间购买网站如何做微信支付宝支付宝支付
  • 济南高端网站建设价格河南省水利建设厅网站
  • 高端的网站网站设计师 要求
  • 凤岗镇网站建设四川省公共资源交易中心
  • 网站管理服务软件公司都是帮别人做网站么
  • 网站开发技术有推广普通话文字素材
  • 商丘三合一网站建设网站开发邮件服务器
  • 网站设置路由器做戒烟网站素材
  • 电子商务网站建设的首要问题多网站后台问题
  • 网站开发者 地图品牌建设的五个要素
  • 石家庄论坛建站模板wordpress主题 m1