前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章带你了解Go语言基础之数组

一篇文章带你了解Go语言基础之数组

作者头像
Go进阶者
发布2021-01-22 10:49:14
2930
发布2021-01-22 10:49:14
举报
文章被收录于专栏:Go语言进阶学习Go语言进阶学习

上篇文章中我们学习了Go语言基础中的变量,一篇文章带你了解Go语言基础之变量,这篇文章我们继续介绍Go语言基础知识,今天跟大家分享的是基础数据类型之数组,一起来学习下吧~

前言

Hey,大家好呀,我是星期八,这次咱们继续学习Go基础之数组扒。

什么是数组

我的总结:一个变量,指向一块连续的,具有长度的,并且是相同类型的一块内存。

如何定义数组

代码语言:javascript
复制
var 变量名 [元素个数]元素类型

示例:

代码语言:javascript
复制
package main

func main() {
    //声明一个name_list数组,长度为100,里面只能放字符串
    var name_list [100]string
}

注:

代码语言:javascript
复制
var 变量名 [元素个数]元素类型 等同于 var 变量名 变量类型
所以
var name1 [3]int != var name2 [4]int
因为变量类型是不一样,不可以直接进行赋值

数组初始化

代码语言:javascript
复制
package main

import "fmt"

func main() {
    //方式一,声明不赋值
    //var name_list [10]int
    //fmt.Println(name_list) //结果:[0 0 0 0 0 0 0 0 0 0] 声明不赋值,int类型默认是0,其他类型也有默认值
    //
    //方式二, 声明没有赋值完
    //var name_list [10]int = [10]int{1, 3}
    //fmt.Println(name_list) //结果:[1 3 0 0 0 0 0 0 0 0],没有赋值完的,其他仍然是默认值

    //方式三,声明完完全赋值
    //var name_list = [3]int{1, 6, 10} //使用类型推断方式,同上
    //fmt.Println(name_list)           //结果:[1 6 10],每个都有值,没啥可说的

    //方式四,自动推断个数
    //var name_list = [...]int{1, 2, 4, 5, 19} //...表示自动推断个数,不会存在过多或者过少
    //fmt.Println(name_list)                   //结果:[1 2 4 5 19]

    //方式五,指定索引方式赋值,用的很少
    var name_list = [...]int{1: 66, 4: 11} //下标1赋值为66,下标4赋值11,其他默认值
    fmt.Println(name_list)                 //结果:[0 66 0 0 11]
}

数组遍历

代码语言:javascript
复制
package main

import "fmt"

func main() {
    var name_list = [...]string{"张三", "李四", "王五", "小刘"}
    //方式一,普通for遍历
    //for i := 0; i < len(name_list); i++ {
    //fmt.Println(name_list[i])
    //}

    //方式二,for range方式
    for index, name := range name_list {
        //index是每个的下标,name是值
        fmt.Println(index, name)
  }
}

多维数组

二维数组

通常情况下,二维数组基本够用,最多三维数组,再套娃就完犊子了。

定义一个二维数组

代码语言:javascript
复制
package main

import "fmt"

func main() {
    //定义一个三行两列的一个数组
    var student_list = [3][2]string{
        // 列     列
        {"张三", "李四"}, //行
        {"王五", "小刘"}, //行
        {"小七", "王八"}, //行
}
    fmt.Println(student_list)
}

循环二维数组

同理,定义一个二维数组需要两层,循环也需要两层。

代码语言:javascript
复制
package main

import "fmt"

func main() {
    //定义一个三行两列的一个数组
    var student_list = [3][2]string{
        // 列     列
        {"张三", "李四"}, //行
        {"王五", "小刘"}, //行
        {"小七", "王八"}, //行
}
    //方式一,普通for循环
    //for i := 0; i < len(student_list); i++ {
    ////fmt.Println(student_list[i])//每行
    ///*
    //      [张三 李四]
    //      [王五 小刘]
    //      [小七 王八]
    //*/
    //for j := 0; j < len(student_list[i]); j++ {
    //      //每列
    //      fmt.Println(student_list[i][j])
    //}
    //}

    //方式二,for range
    for _, v := range student_list {
        //fmt.Println(v) //每行
        /*
            [张三 李四]
            [王五 小刘]
            [小七 王八]
        */
        for _, b := range v {
            //每列
            fmt.Println(b)
        }
  }
}

多维数组是否可以长度推导

代码

代码语言:javascript
复制
package main

import "fmt"

func main() {
    //定义一个三行两列的一个数组
    var student_list = [...][...]string{
        // 列     列
        {"张三", "李四"}, //行
        {"王五", "小刘"}, //行
        {"小七", "王八"}, //行
}
    fmt.Println(student_list)
}

报错

似乎是不可以的,那我只用第一层试试呢。

代码语言:javascript
复制
package main

import "fmt"

func main() {
  //定义一个三行两列的一个数组
  var student_list = [...][2]string{
    // 列     列
    {"张三", "李四"}, //行
    {"王五", "小刘"}, //行
    {"小七", "王八"}, //行
  }
  fmt.Println(student_list)
}

注:可以得出结论,在第一层时,是可以实现长度自动推导的。

总结

上述我们学习了Go基础之数组。如果在操作过程中有任务问题,记得下面讨论区留言,我们看到会第一时间解决问题。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言进阶学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 什么是数组
      • 如何定义数组
        • 数组初始化
          • 数组遍历
            • 多维数组
              • 二维数组
              • 定义一个二维数组
              • 循环二维数组
            • 多维数组是否可以长度推导
              • 总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档