GO语言学习之-数组和切片(一)

数组定义:

1.用var定义(必须给定长度)
    eg: var arr [3] int
2.如果用 := (必须定义初值
eg: arr := [3]int{1,2,3}
3.数组长度定义为[...] ,这样可以不用写数字来定义长度,它会根据初值自动给与长度。否则数组必须定义长度
arr3 := […]int {1,2,3,4,5,6}

切片定义:

最简单的理解:空的数组就是切片 (我个人就是这样来理解)

  eg:    var arr [] int    不定义长度和初始值

对比来解释:

  1. 数组它是值类型 ,而切片时指针类型,
  2. 一般初始化的时候数组的长度液晶是固定的了,而切片不是,它是一个动态的数组切片的底层是数组,而切片的底层是数组

关于循环:

数组循环有2种方式:

一:遍历:

  eg: arr := [3]int{1,2,3}

for i:=0 ; i<len(arr);i++{

fmt.Println(arr[i])
}

二:使用关键字:range

for i,v :=range(arr){   // i为index,v为值
fmt.Println(i,v)
}

注意点:  函数传递时传递数组,那就必须要传递一个数组长度相同的数组变量,因此 在实际开发中 ,我们常用的是切片

make与new 区别:

new

new 可以用来初始化泛型,并且返回储存位址。所以通常我们会用指针变数来接收 new 过后。特别注意的是,

new 会自动初始化类型,也就是字串会是"",number 会是 0,而 channel, func, map, slice 等等则会是 nil。

因为这个特性,如果我们对 map 做以下的操作的话,会出现 panic: assignment to entry in nil map

func main() {
    user := new(map[string]string)
    u := *user
    u["name"] = "csq" // panic: assignment to entry in nil map
}

错误的原因:

    初始化的 map 默认是 nil map,所以直接使用就会报assignment to entry in nil map 的错误。

如果用 struct 做初始化,也可以直接用 & 代表指向的地址

ype User struct {
  Name string
  Age  int
}

func main() {
    p := &User{} //这个可以自定义属性
   //或者
    p := new(User)//这个全部讲属性赋予进去
}

make

make 与 new 不同,是用来初始化 channel, map, slice 等等。另外特别要注意的是 make 并不会传回指针,如果要拿到指针,就要考虑用像是 new 的方式来初始化.

func main() {
    
    user := make(map[string]string)
    user := make([]string, 100) // 初始化长度 100 
}

func main() {
    user := make(map[string]string)
    fmt.Println(*user) // invalid indirect of user 报错

}

  报错原因:

      make 并不会传回指针.

 

 

 

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值