Go语言学习 _基础03 _数组和切片
Go语言学习 _基础03 _数组和切片
1、数组
package array_test
import "testing"
func TestArrayInit(t *testing.T){
var arr [3]int // 声明方式 1
arr1 := [4]int{1,2,3,4} // 声明方式 2
arr2 :=[...]int{1,2,3,4,5} // 声明方式 3 省去对于空间大小的声明 通过初始化来确定 空间大小
arr1[1] = 5
t.Log(arr[1],arr[2])
t.Log(arr1,arr2)
}
func TestArrayTravel(t *testing.T){
arr3 := [...]int{1,2,3,5}
for i := 0; i < len(arr3); i++{ // 传统遍历
t.Log(arr3[i])
}
for idx,e :=range arr3{
t.Log(idx,e) // idx —— 索引值
}
for _,e :=range arr3{ // TODO Go语言有严格的 编程约束,
// TODO 如果 不关心 index 可以使用 下划线 来表示忽略此返回值,但不能没有这个 返回参数的 占位符
t.Log(e) // idx —— 索引值
}
}
// 数组的截取(切片) —— 切头去尾、不可使用负数
func TestArraySection(t *testing.T){
arr3 :=[...]int{1,2,3,4}
arr3_sec := arr3[:] // 全部取
for idx,e :=range arr3_sec{
t.Log(idx,e) // idx —— 索引值
}
arr3_sec = arr3[0:2]
for idx,e :=range arr3_sec{
t.Log(idx,e) // idx —— 索引值
}
}
2、切片
package slice_test
import (
"fmt"
"testing"
)
func TestSliceInit(t *testing.T) {
var s0 []int
t.Log(len(s0), cap(s0))
s0 = append(s0, 1)
t.Log(len(s0), cap(s0))
s1 := []int{1, 2, 3, 4}
t.Log(len(s1), cap(s1))
s2 := make([]int, 3, 5)
t.Log(len(s2), cap(s2))
//t.Log(s2[0],s2[1],s2[2],s2[3],s2[4]) panic: runtime error: index out of range [3] with length 3 [recovered]
// panic: runtime error: index out of range [3] with length 3
t.Log(s2[0], s2[1], s2[2])
// TODO 切片的结构,本质上切片是一个结构体 由 指针 长度(len) 容量(cap) 三个要素组成
// TODO 只有 在 len 范围内 才是可访问的 元素
s2 = append(s2, 1)
t.Log(len(s2), cap(s2))
t.Log(s2[0], s2[1], s2[2], s2[3])
// TODO cap 为切片的 扩充 提供了 空间
}
func TestSliceGrowing(t *testing.T) {
s := []int{}
for i := 0; i < 10; i++ {
s = append(s, i)
t.Log(len(s), cap(s))
t.Log(s)
fmt.Println()
}
// TODO 观察输出 可以看到 每次 存入新元素前 如果会是的 cap < len 那么 cap就会 变成 cap*2
// TODO 来满足增长需求,这也是 为什么 append() 操作之后要把新切片返回给原切片 因为 操作可能带来 空间位置的改变
}
func TestSliceShareMeory(t *testing.T) {
year := []string{"Jan", "Feb", "Mar", "Arp", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
Q2 := year[3:6]
t.Log(Q2, len(Q2), cap(Q2)) // len = 3 ,cap =9 ( cap 会一直 延伸到 这个数组结束的 位置)
summer := year[5:8]
t.Log(summer, len(summer), cap(summer))
summer[0] = "Unknow"
t.Log(Q2)
t.Log(year)
// TODO 从输出 可以观察到 切片共享 内存的 特性
// TODO 如果 源自同一数组的 两个 切片 其一改变 另一个 可能会被影响
}
func TestSliceComparing(t *testing.T) {
//a := []int{1, 2, 3, 4}
//b := []int{1, 2, 3, 4}
//if a == b { // 不能进行比较
// t.Log("equal")
//}
// invalid operation: a == b (slice can only be compared to nil)
}
Go语言学习 _基础03 _数组和切片的更多相关文章
- Groovy语言学习--语法基础(5)
至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...
- Groovy语言学习--语法基础(1)
2018年11月末,从上家公司离职后进入现在的公司.进入项目以来,发现项目中有很多groovy脚本,以前没接触过groovy,抽时间系统地学一下,也方便后期项目的开发和维护. groovy和java的 ...
- Go语言学习之4 递归&闭包&数组切片&map&锁
主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...
- oc语言学习之基础知识点介绍(一):OC介绍
一.第一个OC程序 #import <Foundation/Foundation.h> //导入头文件 int main(int argc, const char * argv[]) ...
- C语言学习018:strdup复制字符串数组
在C语言学习005:不能修改的字符串中我们知道字符串是存储在常量区域的,将它赋值给数组实际是将常量区的字符串副本拷贝到栈内存中,如果将这个数组赋值给指针,我们可以改变数组中的元素,就像下面那样 int ...
- Golang基础(3):数组,切片和字典
一:数组 数组是一个具有相同类型元素,固定长度的有序集合,一般定义如下:var x [5]int表示数组是一个整数型数组,长度为5数组的几种定义方式 a: var来定义数组,然后依次赋值 packag ...
- go语言之字符串、指针、数组、切片、结构struct、面向对象
一: 字符串 概述: Go 语言将字符串作为 种原生的基本数据类型,字 符串的初始化可以使用字符串字面量. (1)字符串是常量,可以通过类 数组 索引访问其字节单元,但是不能修改某个字节的值 (2)宇 ...
- c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组
一.结构体的写入和读取 //写入结构体 FILE *fp = fopen("/Users/ios/Desktop/1.data", "w"); if (fp) ...
- c语言学习之基础知识点介绍(十):数组
本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...
- Go语言学习笔记(三)数组 & 切片 & map
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 数组 Arrays 数组是同一种数据类型的固定长度的序列. 数组是值类型,因此改变副本的值,不会改变本身的值: 当 ...
随机推荐
- 英语.Net多语言开发中的问题
问题与现象 多语言开发是一件成本很高的事情. 很多公司会退而求其次选择只开发英文版本的软件分发到不同国家,但这里仍存在不同问题. 我们就遇到了这样的问题,参考下面的代码. CultureInfo cu ...
- Codeforces Round 886 (Div. 4)
Dashboard - Codeforces Round 886 (Div. 4) - Codeforces A. To My Critics 判断任意两个大于10即可 #include <bi ...
- 解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客)
我们想要解决的问题 让我们深入一个现实场景: 设想你负责汇总多个销售点系统产生的大量数据.这些数据需要被实时处理并在高级分析仪表板上展示,以提供全面的洞察. 在数据处理领域,速度至关重要.ClickH ...
- redhat8 rhel8 启动grub损坏修复
环境:redhat8.4 RHEL8.4 服务器:华为G560 问题描述:调整了/etc/default/grub文件,重新生成/boot/grub2/grub.cfg导致机器启动失败,直接进入了re ...
- mariadb5.5.56二进制离线安装
在生产环境中一般使用发布好的二进制版本,简单概括一下安装过程: 1. 下载 地址为:https://downloads.mariadb.org/mariadb/5.5.56/ 这里选择最新版本的5.5 ...
- 初三年后集训测试---T1排序
初三年后集训测试 $T 1 $ 排序 $$HZOI$$ ·题意: 给定 \(4n\) 个整数,求 : \[\max\{\sum_{i=1}^{4n}(A_{i,1} \times A_{i,2} - ...
- python 离线安装依赖
步骤: 1. 访问 https://pypi.org/ 2. 搜索要下载的依赖 3. 下载tar.gz文件 4. 解压,再解压(第一次解压后的dist文件夹内tar文件需解压) 5. 解压后的文件夹内 ...
- FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
GSYVideoPlayer是一个国产的移动端视频播放器,它采用了IJKPlayer.Media3(EXOPlayer).MediaPlayer.AliPlayer等四种播放器内核,支持弹幕.滤镜. ...
- fluent python-chap3-1
class collections.OrderedDict([items]) 返回一个 dict 子类的实例,它具有专门用于重新排列字典顺序的方法. """ move_t ...
- UWP 通过 .NET 9 和Native AOT 的支持实现 UWP 应用的现代化
微软(9 月 11 日)发布博文,微软正在预览对 .NET 9 的 UWP(通用 Windows 平台)支持,为现有 UWP 开发人员提供一条使用最新的 .NET 和本机 AOT 实现其应用程序现代化 ...