package main
import (
"fmt"
)
//数组:数组是同一类型元素的集合。可以放多个值,但是类型一致,内存中连续存储funcmain() {
//1 数组的定义,数组的大小,在定义阶段就确定了,而且不能改var names [3]stringvar ages [3]int8//2 数组赋值var ages [3]int8
ages[0]=99
ages[2]=88//3 定义并初始化,var ages [3]int=[3]int{1,2,3}
var ages [3]int=[3]int{1,2}
var ages [3]int=[3]int{}
var ages=[3]int{}
ages:=[3]int{1,3,4,7} //不允许多放//4 数组定义并初始化的其他(了解)数组只要定义,长度就固定了,。。。,后面放几个值,数组大小是多少var ages [9]int=[...]int{1,2,3,4,5,6,7,8} //不支持这个var ages =[...]int{1,2,3,4,5,6,7,8}
ages :=[...]int{1,2,3,4,8}
//5 数组的大小是类型的一部分var a [2]int=[2]int{1,2}
var b [2]int=[2]int{1,3}
b=a //如果不是同一种类型,不允许相互赋值//6 数组是值类型var a [2]int=[2]int{1,2}
test5(a) //因为数组是值类型,go函数传参,都是copy传递,如果是值类型,函数内改了,不会影响原来的//7 数组长度 len() 数组长度在定义阶段已经固定//8 数组循环var a =[...]int{7,4,3,5,6,7}
fmt.Println(a[99])
fmt.Println(len(a))
//普通循环for i:=0;i<len(a);i++{
fmt.Println(a[i])
}
//通过range来循环 (range不是内置函数,是一个关键字,for,if,else),打印出索引for i:=range a{
fmt.Println(i)
}
//如果用一个变量来接收,这个值是可迭代的索引//如果用两个变量来接收,这两个变量,一个是索引,一个具体的值for i,value:=range a{
fmt.Println(i)
fmt.Println(value)
}
//把数组循环打印出来for _,value:=range a{
fmt.Println(value)
}
// 9 多维数组var a [3][3]int//定义
a[0][1]=99//使用
fmt.Println(a)
//定义并赋初值var a [3][3]int=[3][3]int{{1},{1,2,3},{4,4,4}}
var s =[3][3]string{{"lqz","xxx","yyy"},{},{}}
//循环多维数组for _,value:=range s{
for _,in_value:=range value{
fmt.Println(in_value)
}
}
//10 数组定义并指定位置初始化var names [100]int=[100]int{10:99,99:99}
var names [100]int=[100]int{10,11,2,44,99:99,45:88}
functest5(a [2]int) {
a[0]=99
}
切片
package main
import"fmt"//切片:切片是由数组建立的一种方便、灵活且功能强大的包装(Wrapper)。切片本身不拥有任何数据。它们只是对现有数组的引用funcmain() {
//1 切片定义的第一种方式//定义一个数组var a =[10]int{9,8,7,6,5,4,3,2,1,0}
//基于数组,做一个切片//[]int 中括号中不带东西,就是切片类型var b []int
b=a[:]
//2 使用切片
fmt.Println(b[0])
//3 修改切片,会影响数组
b[0]=999// 5 切片只切数组一部分var a =[10]int{9,8,7,6,5,4,3,2,1,0}
var b []int=a[3:5]
fmt.Println(b)
//6 当多个切片共用相同的底层数组时,每个切片所做的更改将反映在数组中var a =[10]int{9,8,7,6,5,4,3,2,1,0}
var b []int=a[3:5]
var c []int=a[4:6]
//7 切片的长度和容量var a =[10]int{9,8,7,6,5,4,3,2,1,0}
var b []int=a[3:5]
var b []int=a[7:8]
// 切片长度
fmt.Println(len(b))
// 切片容量(最多能存多少值)
fmt.Println(cap(b))
//8 切片追加值
b=append(b,3)
b=append(b,999)
//到了临界点再追加,超过切片容量,会新开辟新的内存地址存,之后修改不会影响原来的数组了
b=append(b,888)
fmt.Println(b)
fmt.Println(a)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现