golang之array

golang使用array表示固定大小的数组,使用slice表示动态数组。

package main

import "fmt"

func main() {
	var a = [5]int{2,3,5,7,11}
	fmt.Printf("type of array: %T\n", a)
	fmt.Printf("address of array: %p\n", &a)
	fmt.Printf("address of arrar[0]: %p\n", &a[0])

	s := a[:]
	fmt.Printf("slice = %v, len = %d, cap = %d\n", s, len(s), cap(s))
	fmt.Printf("address of slice: %p\n", &s)
	fmt.Printf("address of slice[0]: %p\n", &s[0])

	s = append(s, 13)
	fmt.Printf("slice = %v, len = %d, cap = %d\n", s, len(s), cap(s))
	fmt.Printf("address of slice: %p\n", &s)
	fmt.Printf("address of slice[0]: %p\n", &s[0])
}  

输出如下:

type of array: [5]int
address of array: 0xc420014150
address of arrar[0]: 0xc420014150
slice = [2 3 5 7 11], len = 5, cap = 5
address of slice: 0xc42000a060
address of slice[0]: 0xc420014150
slice = [2 3 5 7 11 13], len = 6, cap = 10
address of slice: 0xc42000a060
address of slice[0]: 0xc42001c0f0

参考资料:

Slices: usage and internals

https://golang.org/pkg/builtin/#append

时间: 2024-11-10 14:26:31

golang之array的相关文章

golang中Array与Slice

在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为形参的时候就存在一些差别. ? 首先,golang中是值传递,并且如果传递的参数是数组的时候并不会隐式将数组作为引用或者指针传入,而是传入副本,而如果想轻量级传递数据,这个时候就需要使用slice了. 可以通过一个简单的例子来验证这个机制: package main import "fmt"

【转】 golang slice array

1. array   同一类型数据的集合     var arr [n]type    //声明type类型一维数组     var arr [m][n]type //声明type类型二维数组     多维数组以此类推     也可以用 := 声明     arr := [n]type{元素1[,元素2, ...]} 其中n可以用 "..." 三个点表示,系统会根据元素个数来确定   下标只能为 int 类型,而 php 还支持 string 类型的下标   1.1 数组长度 len(

golang之 Array(数组)

目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range遍历 五.多维数组 1. 二维数组的定义 2. 二维数组的遍历 六.数组是值类型 七.数组的其他相关方法 一.Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 二.数组的定义 1. 基本语法 // 基本语法: var

golang基础--Array数组

基本特性 格式: var Name [n]<type>,n>0 如: var a [10]int 表示,定义一个长度为10,元素类型为int性的数组 数组长度: 长度(len)也是数组类型的一部分,因此具有不同长度的数组为不同的类型. 如var a [2]int != var a [2]int 注意区分指向数组的指针和指针数组 // 指向数组的指针:变量是指针 a :=[...]int[9:1] //顶一个变量a的数组(长度为100,第100个元素为1) var p *[...]int

golang array, slice, string笔记

本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io. array: 数组的长度是该数组类型的一部分,例如var buffer [256]byte 的类型是[256]byte, len(buffer)总是返回256. slice: 一个slice描述一个数组中连续的一部分,例如var slice = buffer[100:250].slice也可以从slice产生,如var slice2 = slice

Golang后台开发初体验

转自:http://blog.csdn.net/cszhouwei/article/details/37740277 补充反馈 slice 既然聊到slice,就不得不提它的近亲array,这里不太想提值类型和引用类型的概念(个人觉得其实都是值类型),golang的array其实可以假想为C的struct类型,只是struct通过变量名来访问成员(如xxx.yyy),而array通过下标来访问成员(如xxx[3]),具体内存布局如下图所示: 图 1 golang的array内存布局 显然gola

Golang编程经验总结

如何选择web框架: 首先Golang语言开发web项目不一定非要框架,本身已经提供了Web开发需要的一切必要技术.当然如果想要ruby里面Rail那种高层次全栈式的MVC框架, Golang里面暂时没有,但是不是所有人都喜欢这种复杂的框架.Golang里面一些应用层面的技术需要自己去组装,比如session,cache, log等等. 可选择的web框架有martini, goji等,都是轻量级的. Golang的web项目中的keepalive 关于keepalive, 是比较复杂的, 注意

golang( 实现PHP Array 函数 array_column,array_keys, in_array )

引用:https://github.com/jiashaokun/go-util 只在使用中实现了部分函数 package Util func InArray(s interface{}, d map[string]string) int { for _, v := range d { if s == v { return 1 } } return 0 } func ArrayKeys(s string, d map[string]string) int { for k, _ := range

golang passing an array to a function

package main import “fmt” 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}) } }