当前位置: 首页 > news >正文

Golang数据结构

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

常见的数据结构有数组、切片、Map、结构体。

一、数组

    数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型。例如:整形、字符串或者自定义类型。   

    声明数组需要指定元素类型及元素个数,语法格式:var variable_name [size] variable_type

 

二、切片

    切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

    切片声明不需要指定长度,格式为:var identifier []type  

        或使用make()函数来创建切片:var slice1 []type = make([]type, len)

        也可以简写为 slice1 := make([]type, len)

        也可以指定容量,其中capacity为可选参数:make([]T, length, capacity)    这里 len 是数组的长度并且也是切片的初始长度。

 

    len() 和 cap() 函数

        切片是可索引的,并且可以由 len() 方法获取长度。

        切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。

        一个切片在未初始化之前默认为 nil,长度为 0

 

三、结构体

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

    结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:

            type struct_variable_type struct {

                member definition;

                member definition;

                ...

                member definition;

            }     

 

四、Map类型

    Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

    Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

    可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

        /* 声明变量,默认 map 是 nil */

        var map_variable map[key_data_type]value_data_type

        /* 使用 make 函数 */

        map_variable := make(map[key_data_type]value_data_type)

 

        如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

 

 

 

转载于:https://my.oschina.net/u/3625745/blog/3022729

相关文章:

  • JSON 自学手册(图文教程)
  • 周工作总结-数据迁移
  • Bootstrap3基础 navbar 导航条 简单示例
  • fio测试nvme性能
  • element ui step组件在另一侧加时间轴显示
  • Windows 下MongoDB复制集配置
  • TJOI2018Party
  • 互联网再迎来割据时代,小程序成为时代宠儿
  • Elasticsearch通关教程(一): 基础入门
  • centos6.5安装和简单实用pyenv
  • Exchange 2019 版本发布
  • 理解Linux文件系统之 inode
  • 【干货分享】dos命令大全
  • 程序员如何用思维导图高效学习Java编程
  • jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
  • android图片蒙层
  • Angular2开发踩坑系列-生产环境编译
  • flutter的key在widget list的作用以及必要性
  • JavaScript类型识别
  • JavaScript设计模式与开发实践系列之策略模式
  • JS 面试题总结
  • Logstash 参考指南(目录)
  • PHP CLI应用的调试原理
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • 聊聊directory traversal attack
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何实现 font-size 的响应式
  • 我的业余项目总结
  • 原生js练习题---第五课
  • 怎么将电脑中的声音录制成WAV格式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #pragma once
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (第一天)包装对象、作用域、创建对象
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣)循环队列的实现与详解(C语言)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十一)c52学习之旅-动态数码管
  • (五)MySQL的备份及恢复
  • (学习日记)2024.01.19
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)大型网站的系统架构
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)人的集合论——移山之道
  • *2 echo、printf、mkdir命令的应用
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net refrector
  • .NET 常见的偏门问题
  • .Net 应用中使用dot trace进行性能诊断
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明