golang-101-hacks(13)——Array
时间:2022-06-23
本文章向大家介绍golang-101-hacks(13)——Array,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
注:本文是对golang-101-hacks中文翻译。 在Go语言中,长度值是数组类型的一部分。下面的代码声明了一个数组:
var array [3]int
而var slice []int
声明的是一个切片类型。因此尽管是元素类型相同但长度不同的数组是不能相互赋值。例如:
package main
import "fmt"
func main() {
var a1 [2]int
var a2 [3]int
a2 = a1
fmt.Println(a2)
}
The compiler will complain:
cannot use a1 (type [2]int) as type [3]int in assignment Changing "var a1 [2]int" to "var a1 [3]int" will make it work. 另一个需要注意的点是,下面的代码声明了一个数组,而不是一个切片:
array := [...]int {1, 2, 3}
You can verify it by the following code:
package main
import (
"fmt"
"reflect"
)
func main() {
array := [...]int {1, 2, 3}
slice := []int{1, 2, 3}
fmt.Println(reflect.TypeOf(array), reflect.TypeOf(slice))
}
输出结果如下 The output is:
[3]int []int
此外,在Go语言中,函数参数是值传递,如果使用数组作为函数参数,函数只是对数组副本进行操作。查看如下代码:
package main
import (
"fmt"
)
func changeArray(array [3]int) {
for i, _ := range array {
array[i] = 1
}
fmt.Printf("In changeArray function, array address is %p, value is %vn", &array, array)
}
func main() {
var array [3]int
fmt.Printf("Original array address is %p, value is %vn", &array, array)
changeArray(array)
fmt.Printf("Changed array address is %p, value is %vn", &array, array)
}
输出结果是:
Original array address is 0xc082008680, value is [0 0 0]
In changeArray function, array address is 0xc082008700, value is [1 1 1]
Changed array address is 0xc082008680, value is [0 0 0]
通过打印日志中发现,changeArray函数中的数组地址与main函数中的数组地址是不一样的,导致原始数组的内容不会被修改。此外需要特别注意的是,如果数组非常大,在参数传递时,对数组进行复制开销会非常大。
- TiDB 在 G7 的实践和未来
- 投资钛值的你,知道钛链是什么吗?
- Is this a MS EnterLib DAAB BUG or not?
- Silverlight 2 has a Timer (DispatcherTimer)
- 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?
- silverlight 《Hands-On-Labs》教程系列
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
- 2018年机器学习和数据科学重要会议概览
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结
- WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
- 使用动态语言来制作silverlight
- 《资讯》霍金:人工智能的威胁就像核武器,世界将发生10大变化!
- [原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
- 厉害了,连美图CEO都开始热捧区块链了!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊dubbo-go的nacosRegistry
- Java离Linux内核有多远?
- 关于懒汉模式和恶汉模式的区别
- Chrome 新功能 — CSS Overview 尝鲜
- 0门槛,轻松实现条形竞赛图动画
- 读懂数据库中的乐观锁和悲观锁和MVCC
- CentOS 7.x安装微服务网关Apache APISIX
- Sentinel规则Pull模式持久化
- 如何用Cloudbase Framework部署一个Vue项目?
- 第17问:如何评估 alter table 的进度?
- 【LeeCode 困难 python3】329. 矩阵中的最长递增路径
- 干!一张图整理了 Python 所有内置异常
- 面试官问:孤儿进程和僵尸进程,你造吗~
- 最全Vue开发环境搭建
- apicloud api.openwin