Go语言数组实战,彻底掌握数组用法

摘要

主要通过介绍并实战go语言中的数组,数组定义、遍历、长度获取、各种数组类型。让你彻底掌握go数组类型。

Go语言数组介绍

  • 数组是由固定长度的特定类型的元素组成的序列
  • 元素个数可以为零个或者多个
  • 数组下标从0开始
  • 不同长度或不同类型的数组属于不同类型,无法相互赋值
  • Go语言数组是一种值类型,元素是可修改的,数组本身的赋值和当做函数参数传递都是深拷贝,也就是值传递。

数组的定义方式

  • 直接定义:最基本的定义,明确长度,值全是0
  • 指定值定义:指定元素内容,长度为指定元素个数
  • 指定索引定义:指定索引位置元素的值,其余未指定元素为0值,长度根据最大索引值确定
  • 混合指定值和指定索引定义:混合值和索引定义方式

代码示例

package main
import "fmt"

func main(){
        var a[2] int    // 1.直接定义: 定义长度为2, 存储类型为int的数组, 元素全是0
        fmt.Println(a)

        var b = [...]int{1,2} // 2.指定值定义
        fmt.Println(b)

        var c = [...]int{2: 3} // 3. 指定索引定义 未指定按照0值
        fmt.Println(c)

        var d = [...]int{1,2, 5:5, 5} // 4.混合指定值和指定索引定义,未指定按照0值
        fmt.Println(d)
}

代码输出

[0 0]
[1 2]
[0 0 3]
[1 2 0 0 0 5 5]

数组的遍历方式

  • 方式1: range获取索引,通过下标取值
  • 方式2:方式2 range 获取索引和元素内容
  • 方式3:长度+下标
package main
import "fmt"
func main(){
        var a = [...]int{9,8,7}

        // 方式1 range获取索引,通过下标取值
        for i:= range a {
                fmt.Printf("%d-%v ", i, a[i])
        }
        fmt.Println("")

        // 方式2 range 获取索引和元素内容
        for i, v:= range a {
                fmt.Printf("%d-%v ", i, v)
        }
        fmt.Println("")

        //方式3 长度+下标
        for i := 0; i < len(a); i++ {
                fmt.Printf("%d-%v ", i, a[i])
        }
}

代码输出

0-9 1-8 2-7
0-9 1-8 2-7
0-9 1-8 2-7

数组长度获取

很简单,直接通过len(arr)获取即可,cap(arr)可以获取长度, 不过对数组来说这两者一样

代码示例

package main

import "fmt"

func main(){
    var a = [...]int{1,2,3}
    fmt.Println(len(a))
    fmt.Println(cap(a))
}

代码输出

3
3

数组类型

数组种类比较多,只要符合类型定义都可以定义数组。

可以通过 %T 输出数组类型
%v 输出数组详细信息

  • 数值数组
  • 空数组(长度为零,不占用空间)
  • 字符串数组
  • 结构体数组
  • 函数数组
  • 接口数组
  • 通道数组

代码示例

package main
import "fmt"

type Student struct{
        Name string
}
func Eat(){
}

func main(){
        // 数值数组
        var a = []int{1,2,3}
        // 空数组
        var empty = [0]int{}
        // 字符串数组
        var s = [...]string{"hello", "world"}
        // 结构体数组
        var as = [...]Student{Student{Name:"jack"}}
        // 函数数组
        var af = [...]func(){Eat}
        // 接口数组
        var ai = [...]interface{}{"hi", 123}
        // 通道数组
        var ac = [...]chan int{}


        // 输出
        fmt.Printf("%T - %v\n", a, a)
        fmt.Printf("%T - %v\n", empty, empty)
        fmt.Printf("%T - %v\n", s, s)
        fmt.Printf("%T - %v\n", as, as)
        fmt.Printf("%T - %v\n", af, af)
        fmt.Printf("%T - %v\n", ai, ai)
        fmt.Printf("%T - %v\n", ac, ac)
}

代码输出

[]int - [1 2 3]
[0]int - []
[2]string - [hello world]
[1]main.Student - [{jack}]
[1]func() - [0x109add0]
[2]interface {} - [hi 123]
[0]chan int - []

这里是数组实战记录,欢迎评论、私信、关注交流,更多实战内容在路上~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值