前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Golang语言情怀-第8期 Go 语言数组

Golang语言情怀-第8期 Go 语言数组

作者头像
李海彬
发布2021-01-12 10:23:04
发布2021-01-12 10:23:04
52200
代码可运行
举报
文章被收录于专栏:Golang语言社区Golang语言社区
运行总次数:0
代码可运行

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。

Go语言数组的声明

数组的声明语法如下:

代码语言:javascript
代码运行次数:0
复制
var 数组变量名 [元素数量]Type

语法说明如下所示:

  • 数组变量名:数组声明及使用时的变量名。
  • 元素数量:数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量不能含有到运行时才能确认大小的数值。
  • Type:可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。

数组的每个元素都可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置,内置函数 len() 可以返回数组中元素的个数。

遍历数组——访问每一个数组元素

代码语言:javascript
代码运行次数:0
复制
var binge [3]string
 binge[0] = "Golang语言社区"
 binge[1] = "www.Golang.Ltd"
 binge[2] = "Go语言中文标准库文档地址:Doc.Golang.Ltd"
for k, v := range binge{
    fmt.Println(k, v)
}

Go语言中允许使用多维数组,因为数组属于值类型,所以多维数组的所有维度都会在创建时自动初始化零值,多维数组尤其适合管理具有父子关系或者与坐标系相关联的数据。 声明多维数组的语法如下所示:

代码语言:javascript
代码运行次数:0
复制
var array_name [size1][size2]...[sizen] array_type

以社区的斗兽棋游戏服务器为例,如下:

代码语言:javascript
代码运行次数:0
复制
var addrDSQ = flag.String("addrDSQ", "127.0.0.1:8888", "http service address") // 链接gateway
var ConnDSQ *websocket.Conn                                                    // 保存用户的链接信息,数据会在主动匹配成功后进行链接
var ConnDSQRPC *rpc.Client                                                     // 链接DB server
var DSQAllMap map[string]*RoomPlayerDSQ                                        // 游戏逻辑存储
var DSQ_qi = []int{                                                            // 1-8 A ;9-16 B ; 17 未翻牌; 18 已翻牌
        Proto2.Elephant, Proto2.Lion, Proto2.Tiger, Proto2.Leopard, Proto2.Wolf, Proto2.Dog, Proto2.Cat, Proto2.Mouse,
        Proto2.Mouse + Proto2.Elephant, Proto2.Mouse + Proto2.Lion, Proto2.Mouse + Proto2.Tiger, Proto2.Mouse + Proto2.Leopard,
        Proto2.Mouse + Proto2.Wolf, Proto2.Mouse + Proto2.Dog, Proto2.Mouse + Proto2.Cat, 2 * Proto2.Mouse}
var cacheDSQ *cache2go.CacheTable
var DSQLeftTime int = 30
var DSQTimeSpeed = time.Millisecond * 2000
var TimeOutDSQ chan map[int]int64

type RoomPlayerDSQ struct {
        RoomID       int
        IsRoomID     bool
        OpenIDA      string
        OpenIDB      string
        OpenIDA_Seat int       // 默认是0;1 表示坐下
        OpenIDB_Seat int       // 默认是0;1 表示坐下
        Default      [4][4]int // 未翻牌的
        ChessData    [4][4]int // 棋盘数据
        ReChessData  [4][4]int // 重连棋盘数据
        AChessNum    int       // A的剩余的棋子的数量
        BChessNum    int       // B的剩余的棋子的数量
        GoAround     int       // 回合,如果每人出10次都没有吃子,系统推送平局;第七个回合提示数据 第10局平局
        LeftTime     int       // 剩余的时间
}
代码语言:javascript
代码运行次数:0
复制
/*
        -------------------------------------------------------
        |                                                                                                   |
        |        [0,0]01        [1,0]02        [2,0]03        [3,0]04                |
        |                                                                                                   |
        |                                                                                                   |
        |        [0,1]05        [1,1]06        [2,1]07        [3,1]08                |
        |                                                                                                   |
        |                                                                                                   |
        |        [0,2]09        [1,2]10        [2,2]11        [3,2]12                |
        |                                                                                                   |
        |                                                                                                   |
        |        [0,3]13        [1,3]14        [2,3]15        [3,3]16                |
        |                                                                                                   |
        --------------------------------------------------------
*/

赋值:

代码语言:javascript
代码运行次数:0
复制
data1 := [4][4]int{{2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1},
                {2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1},
                {2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1},
                {2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1, 2*Proto2.Mouse + 1}}

数组做函数参数是值拷贝:

代码语言:javascript
代码运行次数:0
复制
package main //必须有个main包

import "fmt"

//数组做函数参数,它是值传递
//实参数组的每个元素给形参数组拷贝一份
//形参的数组是实参数组的复制品
func modify(a [5]int) {
    a[0] = 666
    fmt.Println("modify a = ", a)
}

func main() {
    a := [5]int{1, 2, 3, 4, 5} //初始化

    modify(a) //数组传递过去
    fmt.Println("main: a = ", a)
}

执行结果:
modify a =  [666 2 3 4 5]
main: a =  [1 2 3 4 5]

Golang语言情怀

ID:wwwGolangLtd

www.Golang.Ltd

游戏服务器架构丨分布式技术丨大数据丨Go语言学习

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

本文分享自 Golang语言情怀 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go语言数组的声明
  • 遍历数组——访问每一个数组元素
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档