• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > Go语言中的复合类型详细介绍

Go语言中的复合类型详细介绍

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了go语言介绍,go语言,go语言环境搭建,go语言程序设计,let it go 25种语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

golang复合类型包括:结构体、数组、切片、Maps。

1、数组

数组

golang中的数组与C语言中的数组差异很大,倒更类似Pascal中的数组。 (Slice,下个话题,有些像C语言中的数组)

var ar [3]int
</div>

声明ar为一个拥有三个整型数的数组,所有元素初始化为0。

大小是类型的一个组成部分。

内置的函数len可以用于获取数组大小:

len(ar) = 3
</div>

数组是值类型

golang中的数组是值,而非C语言中的隐式指针。你可以获得数组的地址,并生成一个指向数组的指针(例如,将其高效地传递给函数):
func f(a [3]int) { fmt.Println(a) }  
func fp(a *[3]int) { fmt.Println(a) }  
 
func main() {  
    var ar [3] int 
    f(ar) // 传递一个ar的拷贝  
    fp(&ar) // 传递一个指向ar的指针  
} 
</div>

输出结果:

[0 0 0]

&[0 0 0]
</div>

数组字面值

所有的符合类型都有相同的值创建语法。以数组为例,其语法如下:

3个整数的数组:

[3]int{1, 2, 3}
</div>

10个整数的数组,前三个元素不是0:

[10]int{ 1, 2, 3}
</div>

不想数?使用…代表长度:

[...]int{1, 2, 3}
</div>

不想初始化所有值?使用key:value对:

[10]int{2:1, 3:1, 5:1, 7:1}
</div>

指向数组字面值的指针

你可以获取数组字面值的地址,这样可以得到一个指向新建数组实例的指针:

func fp(a *[3]int) { fmt.Println(a) }  
func main() {  
    for i := 0; i < 3; i++ {  
        fp(&[3]int{i, i*i, i*i*i})  
    }  
} 
</div>

输出结果:

&[0 0 0]
&[1 1 1]
&[2 4 8]
</div>

2、切片(Slice)

切片

切片是对数组中某一段的引用。

切片比普通数组应用得更多也更广泛。

切片使用的代价很低。

一个切片类型很像一个没有大小的数组类型:

var a []int
</div>

内置的len(a)可以返回切片中元素的个数。

通过对数组或切片进行"切片",我们可以创建一个新切片:

a = ar[7:9]
</div>

a(上面例子中的a)的有效下标值是0和1;len(a) == 2。

切片速记

当对数组进行切片时,第一个下标值默认是0:

ar[:n]等价于a[0:n]。

第二个下标值默认为len(array/slice):

ar[n:]等价于ar[n:len(ar)]。

因此由数组创建切片时:

ar[:]等价于ar[0:len(ar)]。

切片引用数组

概念上:

type Slice struct {
base *elemType // 指向0th元素的指针
len int // 切片中元素的数量
cap int // 切片可以容纳元素的数量
}
</div>

数组:

ar: 7 1 5 4 3 8 7 2 11 5 3
</div>

切片:

a = ar[7:9] :base = &ar[7](指向ar中的2) len = 2 cap = 4
</div>

创建切片

切片字面值看起来像没有指定大小的数组字面值:

var slice = []int{1,2,3,4,5}
</div>

上面代码创建了一个长度为5的数组并创建一个切片用于引用这个数组。

我们可以使用内置的make函数分配一个切片(底层实际是个数组):

var s100 = make([]int, 100) // slice: 100 ints
</div>

为何用make而不是用new?因为我们需要创建切片,而不仅仅是为了分配内存。注意make([]int, 10)返回[]int,而new([]int)返回*[]int。

使用make创建切片、map以及channel。

切片容量

切片是对底层数组的一个引用。因此存在一些在数组里但却没在切片引用的范围内的元素。

内置的函数cap(capacity)用于报告切片可能增长到多长。

var ar = [10]int{0,1,2,3,4,5,6,7,8,9}
var a = ar[5:7] // 引

您可能想查找下面的文章:

  • Go语言struct类型介绍
  • Go语言中的复合类型详细介绍

相关文章

  • Go语言里的结构体文法实例分析
  • Golang学习笔记(五):函数
  • GO语言(golang)基础知识
  • go语言执行windows下命令行的方法
  • Fedora14 Linux系统安装Golang开发环境笔记
  • Go语言执行系统命令行命令的方法
  • go语言对文件按照指定块大小进行分割的方法
  • go语言base64用法实例
  • Go语言并发技术详解
  • go语言使用scp的方法实例分析

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • go语言的sql包原理与用法分析
    • go语言base64用法实例
    • golang简单tls协议用法完整示例
    • GO语言Defer用法实例分析
    • 浅谈Go语言的空标示符
    • Go语言中的Slice学习总结
    • 利用Go语言实现简单Ping过程的方法
    • 谈谈Go语言的反射三定律
    • 浅析Go语言中的Range关键字
    • golang image图片处理示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有