go 数组(array)、切片(slice)、map、结构体(struct)
一 数组(array)
go语言中的数组是固定长度的。使用前必须指定数组长度。
go语言中数组是值类型。如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址。
声明:
var arrayName = [arraySize]dataType{xxx,xxx,xxx....} //定义全局数组
例如:var b = [10]int{1,2,3,4,5,6,7,8,9,0}
var b = [10]int{1,2,3,4} //不足自动补0
arr := [...]int{,,,,}
//循环
for _,i := range arr {
fmt.Println(i)
}
多维数组:
//初始化:
var a = [][]int{[]int{,,},[]int{,,},[]int{,}} //不足补0
//创建数组声明changdu
var aaa1 = []int{,,,}
fmt.Println(aaa1) //创建数组不声明长度
var aaa2 = [...]int{,,,,,}
fmt.Println(aaa2) //创建数组并初始化其中部分
var aaa3 = []string{:"aaa",:"bbb"}
fmt.Println(aaa3)
切片(slice)
指向底层数组的指针。不需要定义长度。和数组在写法上的区别就是不需要指定长度
对比:
v := []string{"",""} //数组
v := []string{"",""} //切片
默念:数组有长度,切片没长度,数组有长度,切片没长度......
如果多个slice指向同一个底层数组,其中一个改变了数组的值,则其他如果包括这个key的值也会改变
如果slice增加时,导致数组超长,则会再次分配一个新的数组。其他slice可能就会指向这个新的底层数组,这个前一个改变了底层数组的值可能是第一个底层数组,所以第二个slice的key 指向的是第二个底层数组。这点有点混淆。来自无闻视频教程中讲解。
方法:
append(arr,,,,,) //将1,2,3,4,5追加到arr中 slice := arr[开始:结束] //指向数组中开始到结束的 copy(arr1,arr2) //用arr2中的值替代arr1中的值,通过key 对应的代替 copy(arr1[开始:结束],arr2[开始:结束]) 指定替换部位
map:
是一个key=>value的hash结构
key是除func、slice、map、array外的类型
声明初始化 m := map[string]string{}
赋值一个 m["key1"] = "val1"
取值 v := m["key1"]
删除一个值 d := delete(m,"key1")
取值的时候可以返回两个值。另一个可以判断是否存在
val,isset := m[2]
struct(结构体)
个人理解:一种类型;
例如:
type person{
Name string
ages int
}
使用该类型需要定义该类型中两个属性
所有值传递不会改变内存中的值,只有引用类型该可以改变内存中的值
内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),第一个参数也是一个类型而不是一个值
func make(t Type,size IntegerType) Type
make slice
var slice_ []int = make([]int,,)
fmt.Println(slice_) var slice_1 []int = make([]int,)
fmt.Println(slice_1) var slice_2 []int = []int{,}
fmt.Println(slice_2) 打印结果:
[ ]
[ ]
[,]
make map
var m_ map[string]int = make(map[string]int)
m_["one"] =
fmt.Println(m_) var m map[string]int = map[string]int{"":}
m[""] =
fmt.Println(m) 打印结果:
map[one:]
map[: :]
mak channel
var c = make(chan bool)
go 数组(array)、切片(slice)、map、结构体(struct)的更多相关文章
- 遍历切片slice,结构体struct,映射map,interface{}的属性和值
1 前言 说明:interface{}必须是前三者类型 2 代码 /** * @Author: FB * @Description: * @File: testOutput.go * @Version ...
- Go 数组(array) & 切片(slice)
数组 数组是一组固定长度的序列 数组类型 数组的类型不仅和储存元素的类型有关,还和数组长度有关,不同长度的数组是不同的类型 不同类型的数组不能共用一个函数 func main() { var a [1 ...
- MATLAB 单元数组 cell 和结构体 struct 的用法以及区别
1. 前言 Matlab单元数组cell和结构体struct都可以将不同类型的相关数据集成到一个单一的变量中,使得大量的相关数据的处理变得非常简单而且方便.但是,需要注意的是,单元数组和结构体只是承载 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- 获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf
转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq 结构体struct ifconf来获取网络接口的各种信息. ioctl 首先看 ...
- C语言结构体-struct
知识点: 1)结构体的定义. 2)结构体的sizeof. 3) 结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将 ...
- 内核中用于数据接收的结构体struct msghdr(转)
内核中用于数据接收的结构体struct msghdr(转) 我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,pin ...
- 结构体(struct)大小
结构体(struct)大小 本文参考链接:C语言结构体(struct)常见使用方法,链接中的实例代码经实践有几处不准确,本文在引用时已做更改 注意:在结构体定义时不能申请空间(除非是结构体变量),不可 ...
- GO开发[五]:golang结构体struct
Go结构体struct Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继承在内的大量面向对象特性,只保留了组合(composition)这个最基础的特性 ...
随机推荐
- 列表屏幕(List Screen)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ks
http://www.codeproject.com/Articles/207820/The-Repository-Pattern-with-EF-code-first-Dependen
- HotApp小程序统计之如何接入
1.统计接入留存说明 更详细的说明,可以查看官网的文档 https://weixin.hotapp.cn/document 统计接入流程只需要4步 (1)注册账号 打开http://weixin.h ...
- iOS中的交换空间(swap space)
看来是没有交换空间,原因是闪存和SSD硬盘相比,速度很慢,也有电源管理的原因. the NAND flash is not designed to be used as swap. It is dam ...
- [转]Android应用程序框架思路整理
一.一般Android应用程序架构(Book,购彩,Market). 普通的应用程序由于只需要用到Android的联网与显示的功能,所以应用程序大体上是呈现为UI(Activities)与网络(Net ...
- UILabel
//UILabel->UIView /* 1.实例化 2.属性 3.添加到父视图上 */ //实例化 UILabel *label = [[UILabel alloc] initWithFram ...
- 整型信号量和PV操作(计算机操作系统)
在整型信号量机制中,信号量被定义为一个整形变量.除初始化外,仅能通过两个标准的原子操作Wait(S)和Signal(S)来访问.其通常分别被称为P.V操作. 描述如下: P操作:S=S-1:如果S小于 ...
- mysqldump: Error: Binlogging on server not active
在学习使用mysqldump时,使用mysqldump备份时,遇到了下面两个错误: [root@DB-Server backup]# ./mysql_dump_back.sh Warning: Usi ...
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
用户定义函数(UDF)分类 SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...
- .NET应用架构设计—用户端的防腐层作用及设计
阅读目录: 1.背景介绍 2.SOA架构下的显示端架构腐化 3.有效使用防腐层来隔离碎片服务导致显示端逻辑腐烂 4.剥离服务调用的技术组件让其依赖接口 5.将服务的DTO与显示端的ViewModel之 ...