当前位置: 首页 > 编程日记 > 正文

【Go】Go基础(六):数组、切片slice、映射map

1、数组
1.1 数组定义

数组:数组是具有相同 唯一类型 的一组已编号且长度固定的数据项序列。
数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以[5]int和[10]int是属于不同类型的。数组长度最大为 2Gb

1.2 遍历

方法一:
for i:=0; i < len(arr1); i++ {
arr1[i] = …
}
方法二:
for i,_:= range arr1 {
arr1[i] = …
}

2、切片
2.1 切片定义

切片:切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型)。
这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。
切片是一个 长度可变的数组。

2.2 切片常用函数

len():获取切片长度
cap():获取切片可以设置的最大长度,它等于切片的长度 + 数组除切片之外的长度,0 <= len(s) <= cap(s)

2.3 切片声明:
var slice1 []type
2.4 切片初始化:
var slice1 []type = arr1[start:end]
var slice1 []type = arr1[:] 
var slice1 []type = make([]type, len)
slice1 := make([]type, len)
2.5 bytes 包
定义长度可变的buffervar buffer bytes.Buffer
或者使用new分配var r *bytes.Buffer = new(bytes.Buffer)
2.6 For-range 结构
for i, value := range slice1 {...
}
2.7 切片重组(reslice)
slice1 := make([]type, start_length, capacity)

其中 start_length 作为切片初始长度而 capacity 作为相关数组的长度。

2.8 切片的复制与追加

copy函数:切片复制
append函数:切片追加

2.9 字符串、数组和切片的应用

从字符串生成字节切片:
c := []byte(s)
copy(dst []byte, src string)
r := []rune(s) //类型为 rune 的切片存储Unicode字符串

字符串:
* 一个字符串实际上是一个双字结构,即一个指向实际数据的指针和记录字符串长度的整数
* Go 语言中的字符串是不可修改

修改字符串中的某个字符:
先将字符串转换成字节数组,然后再通过修改数组中的元素值来达到修改字符串的目的,最后将字节数组转换回字符串格式。
s := “hello”
c := []byte(s)
c[0] = ‘c’
s2 := string© // s2 == “cello”

sort 包:搜索及排序切片和数组:

* sort.Ints(arri):对int类型的切片做升序排序
* IntsAreSorted(a []int) bool:是否已经排序
* func SearchInts(a []int, n int) int:搜索,必须先排好序再搜索
* func Float64s(a []float64)	:排序float64
* func Strings(a []string):排序字符串

append 函数常见操作:

* 将切片 b 的元素追加到切片 a 之后:a = append(a, b...)
* 复制切片 a 的元素到新的切片 b 上:b = make([]T, len(a)); copy(b, a)
* 删除位于索引 i 的元素:a = append(a[:i], a[i+1:]...)
*切除切片 a 中从索引 i 至 j 位置的元素:a = append(a[:i], a[j:]...)
* 为切片 a 扩展 j 个元素长度:a = append(a, make([]T, j)...)
* 在索引 i 的位置插入元素 x:a = append(a[:i], append([]T{x}, a[i:]...)...)
* 在索引 i 的位置插入长度为 j 的新切片:a = append(a[:i], append(make([]T, j), a[i:]...)...)
* 在索引 i 的位置插入切片 b 的所有元素:a = append(a[:i], append(b, a[i:]...)...)
* 取出位于切片 a 最末尾的元素 x:x, a = a[len(a)-1], a[:len(a)-1]
* 将元素 x 追加到切片 a:a = append(a, x)
3、map
3.1 map定义

map 是一种元素对(pair)的无序集合;

3.2 声明:
var map1 map[keytype]valuetype
var map1 map[string]int

注意:
key 可以是任意可以用 == 或者 != 操作符比较的类型,比如 string、int、float。所以数组、切片和结构体不能作为 key

3.3 初始化:

map 是引用类型的;内存用 make 方法来分配,永远不要使用 new 来构造 map;
map 的初始化:var map1 = make(map[keytype]valuetype)。
或者简写为:map1 := make(map[keytype]valuetype)。

3.4 测试和删除

测试键值是否存在
map返回两个值,后一值类型为bool表示,键值是否存在

if _, ok := map1[key1]; ok {// ...
}

删除键值:delete(map1, key1)

3.5 可以使用 for 循环构造 map:
for key, value := range map1 {...
}

相关文章:

语义表征的无监督对比学习:一个新理论框架

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑译者 | Linstancy责编 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;诸如图像、文本、视频等复杂数据类型的语义表征 (也称为语义嵌入) 已成为机器学习的核心…

YEX黄建:脱离比特币谈区块链,要么真傻,要么装疯卖傻丨区块链十人谈

如果说2017年是属于虚拟货币的一年&#xff0c;那么2018年的区块链将是生态和应用的一年&#xff0c;随之而来的也将是新的玩法、新的赚钱姿势。为此&#xff0c;雷锋网推出“区块链十人谈”&#xff08;十人者&#xff0c;取是知众人博所长之意&#xff0c;非实指&#xff09;…

70佳精美的PSD素材免费下载(上篇)

设计师经常会去网上搜罗各种各样的素材&#xff0c;这些免费素材不仅能帮助他们节省大量的时间&#xff0c;而且能有很好的效果。今天&#xff0c;本文与大家分享70佳精美的PSD素材&#xff0c;非常感谢那些很有才华的设计师分享它们的劳动成果&#xff0c;让更多的人可以使用他…

漫画讲述人工智能简史

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑作者 | 武博士、宋知达、袁雪瑶、聂文韬来源 | 大鱼AI&#xff08;id:DayuAI-Founder&#xff09;本文我们会以生动有趣的漫画来介绍关于人工智能&#xff08;AI&#xff09;相…

【Go】Go基础(七):包

一、标准库概述 1、官方手册 内置包在 Go 语言中有 150 个以上&#xff0c;它们被称为标准库&#xff0c;完整列表可以在Go Walker中查看 https://gowalker.org/search?qgorepos 2、常用包简介 unsafe: 包含了一些打破 Go 语言“类型安全”的命令&#xff0c;一般的程序中不会…

Mysql是时候学习一个存储过程了

create procedure 存储过程名() DECLARE uid INT; #注意声明的变量名不能跟表的字段名一致&#xff0c;否则会报错。如user的主键是id&#xff0c;那么这里声明用来存id值的变量名就不能为id&#xff0c;可以改为uid等 DECLARE done INT DEFAULT 0; #repeat结束标识 DECLARE us…

ASP.NET的Cookie跨域问题

将Cookie的有效范围限制到域。 默认情况下&#xff0c;Cookie 与特定的域相关联。例如&#xff0c;如果您的站点是 www.contoso.com&#xff0c;那么当用户向该站点请求页面时&#xff0c;您编写的Cookie就被发送到服务器。&#xff08;有特定路径值的Cookie除外&#xff09;…

详解物联网的中间件:为何说它是不可或缺的?

互联网的大规模普及&#xff0c;拉近了人与人之间的交流&#xff0c;而不同国家人与人之间的交往也变得密切起来。由于彼此使用的语言不通&#xff0c;为了能够互相交流&#xff0c;我们需要将不同种的交流语言转换成对方可识别的信息&#xff0c;这就是翻译存在的理由了。同样…

Decoders对于语义分割的重要性 | CVPR 2019

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑作者 | Lin-Zhuo Chen转载自博客链接&#xff1a;https://linzhuo.xyz/posts/DUpsample/今天为大家推荐一篇 CVPR2019 关于语义分割的文章 Decoders Matter for Semantic Segme…

【Go】Go基础(八):结构体和方法

一、 结构体&#xff08;struct&#xff09; 1、结构体定义 type identifier struct {field1 type1field2 type2... }声明&#xff1a;new(Type) 和 &Type{}是等价的 2、初始化结构体 type Interval struct {start intend int }初始化方式&#xff1a; intr : Inter…

Windows 2008 R2 SP1部署Lync2010企业版(四)

9 部署存档和监控服务器 1) 以域管理身份登录SQL01服务器。 2) 单击“开始”&#xff0c;依次指向“程序”、“管理工具”&#xff0c;然后单击“服务器管理器”显示服务器管理器。 3) 单击“添加功能”启动“添加功能向导”&#xff0c;选择“消息队列”&#xff0c;下一步。 …

【Go】Go基础(九):接口(Interfaces)与反射(reflection)

一、接口&#xff08;interfaces&#xff09; 1、概述 接口定义了一组方法&#xff08;方法集&#xff09;&#xff0c;但是这些方法不包含&#xff08;实现&#xff09;代码&#xff1a;它们没有被实现&#xff08;它们是抽象的&#xff09;。接口里也不能包含变量。 通过如…

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

原型链是JS的必备&#xff0c;作为ECMAScript4,原型链也是支持的。 特别说明&#xff0c;ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用。 本文旨在介绍如何使用原型链。 任意对象类型都有一个prototype属性&#xff0c;包括导入的Unity的A…

教育部发文35所高校新增AI本科专业!想回去重新高考

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑作者 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 年 3 月 28 日&#xff0c;教育部公布了 2018 年度普通高等学校本科专业备案和审批结果。消息一出&…

莱芜市公安局交警支队智能交通项目集成及容灾公开招标公告

莱芜市公安局交警支队智能交通建设项目公开招标公告 时间:2011-7-5 点击:249莱芜市公安局交警支队智能交通建设项目公开招标公告一、招标人名称&#xff1a;莱芜市公安局交警支队 联系方式&#xff1a;0634-5667998&#xff08;吕老师&#xff09;二、招标代理机构名称&#x…

【Go】Go基础(十):文件读写

一、读写数据 1、读取用户的输入 使用fmt 包提供的 Scan 和 Sscan 开头的函数&#xff1b; * Scanln 扫描来自标准输入的文本&#xff0c;将空格分隔的值依次存放到后续的参数内&#xff0c;直到碰到换行。 * Scanf 与其类似&#xff0c;除了 Scanf 的第一个参数用作格式字符…

怎样能拿到第一份编程工作?这里告诉你答案 | 码书

“写代码时&#xff0c;每次都要告诉自己&#xff1a;最后负责维护代码的&#xff0c;会是一个知道你住在哪的变态暴力狂。” ——约翰伍德&#xff08;John Woods&#xff09;拿下第一份编程工作需要付出更多努力&#xff0c;但是如果采纳下面的建议&#xff0c;应该不会有太大…

JSON知识点

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读…

asp常用函数(备忘)

1.数组长度&#xff1a; <% Dim grade,i gradesplit("1,2,5,10,20,50,100,200,500,1000",",") for i0 to ubound(grade) response.write grade(i)&"\n" next %> 2.获得插入的id set rs server.createobject(&q…

【leetcode】力扣刷题(1):两数之和(Go、Python)

一、问题描述 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复利用这个数组中同样的元素。 示例: 给定 nums [2, 7,…

轻松练:如何从900万张图片中对600类照片进行分类|技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后2天&#xff0c;请扫码咨询 ↑↑↑作者 | Aleksey Bilogur译者 | 风车云马责编 | Jane出品 | AI科技大本营&#xff08;公众号id:rgznai100&#xff09;【导语】完成一个简单的端到端的机器学习模型需要几步&…

介绍两个好玩的和Github相关的Chrome扩展

1. Octotree 默认的github网页里的代码显示没有我们在IDE里看到的直观&#xff0c;即代码文件所在的文件夹无法以树形层级结构显示在屏幕左边。 安装Octotree之后&#xff1a; 方便多了。 2. Isometric Contributions github commit的统计页面比较平淡&#xff1a; 安装了Isome…

Schema约束模式实例

book.xsd <?xml version"1.0" encoding"UTF-8"?> <!-- xmlns:默认命名空间 xmlns:xs:当前的文档的标记来自http://www.w3.org/2001/XMLSchema命名空间 前缀:xs elementFormDefault&#xff1a;当前文档使用的标记必须是使用http://www.w3.…

【leetcode】力扣刷题(2):两数相加(go语言)

一、问题描述 给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 如果&#xff0c;我们将这两个数相加起来&#xff0c;则会返回一个新的链表来表示它们的和。 您可…

“GANs之父”Ian Goodfellow被爆已从Google离职

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后2天&#xff0c;请扫码咨询 ↑↑↑整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;3 月 28 日&#xff0c;深度学习大牛李沐在知乎爆料称&#xff0c;他从某机器学习大佬处获悉&#xff0c…

Gulp快速入门教程

Gulp是基于流的前端自动化的构建工具&#xff0c;虽说如今是webpack盛行的时代&#xff0c;但是gulp和webpack整合效果更美味的&#xff0c;鱼与熊掌都可兼得哦&#xff01;本文只介绍下Gulp的基本使用和一些常用的Gulp插件&#xff0c;废话不多说&#xff0c;一起来看看吧。 g…

linux 防火墙 命令

-- 永久设置防火墙&#xff08;重启不恢复&#xff09; 开启&#xff1a;chkconfig iptables on 关闭&#xff1a;chkconfig iptables off-- 暂时设置防火墙&#xff08;重启后恢复&#xff09; 开启&#xff1a;service iptables start 关闭&#xff1a;service i…

如何将TensorFlow Serving的性能提高超过70%?

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后2天&#xff0c;请扫码咨询 ↑↑↑译者 | Major出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;TensorFlow已经发展成为事实上的ML(机器学习)平台&#xff0c;在业界和研究领域都很流行。对TensorFlow…

【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)

一、问题描述 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是…

单点登录与权限管理本质:session和cookie介绍

本篇开始写「单点登录与权限管理」系列的第一部分&#xff1a;单点登录与权限管理本质&#xff0c;这部分主要介绍相关的知识概念、抽象的处理过程、常见的实现框架。通过这部分的介绍&#xff0c;能够对单点登录与权限管理有整体上的了解&#xff0c;对其相关概念、处理流程、…