切片
代码
package test
import "fmt"
func Slice() {
array := [5]int{1, 2, 3, 4, 5}
var s1 []int = array[1:4]
s1[0] = 0
fmt.Println("array = ", array)
s2 := s1[1:]
s2[0] = 0
fmt.Println("array = ", array)
var s3 []int
fmt.Println("does s3==nil?", s3 == nil)
s3 = make([]int, 3, 5)
fmt.Printf("len(s3)=%v,cap(s3)=%v,s3=%v\n", len(s3), cap(s3), s3)
s4 := []int{1, 2, 3}
fmt.Println("s4=", s4)
fmt.Printf("len(s1)=%v cap(s1)=%v\n", len(s1), cap(s1))
s1 = append(s1, 6, 7, 8)
s1[4] = 0
fmt.Println("array=", array)
fmt.Println("s1=", s1)
fmt.Printf("len(s1)=%v cap(s1)=%v\n", len(s1), cap(s1))
s5 := append(s1, s2...)
fmt.Println("s5=", s5)
s6 := []int{1, 1}
copy(s6, s5)
fmt.Println("s6", s6)
fmt.Println("string与[]byte")
str := "hello world"
fmt.Printf("[]byte(str)=%v\n[]byte(str)=%s\n", []byte(str), []byte(str))
for i, v := range str {
fmt.Printf("下标:%v,值为:%v,值对应的字符:%c\n", i, v, v)
}
testFunction("hello", "world", "1", "2", "3", "etc")
}
func testFunction(text ...string) {
fmt.Println("text = ", text)
fmt.Println(len(text), cap(text))
}
package main
import "GoExample/test"
func main() {
test.Slice()
}
关于切片容量的扩容机制:
1. 当原切片长度小于 1024 时,新的切片长度直接加上 append 元素的个数,容量则会直接 *2
2. 当原切片长度大于等于 1024 时,新的切片长度直接加上 append 元素的个数,容量则会增加 1/4
参考文献:
https://juejin.cn/post/7159748785176838181
本博客参考自:
https://www.bilibili.com/video/BV1s341147US/?spm_id_from=333.337.search-card.all.click&vd_source=a642bb3ddc5b706845426dc41d73fbda
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现