写点什么

Go 学习笔记——同构复合类型

作者:为自己带盐
  • 2022 年 2 月 18 日
  • 本文字数:780 字

    阅读完需:约 3 分钟

Go学习笔记——同构复合类型

一、数组的特性

  • 定义:Go 语言的数组是一个长度固定的、由同构类型元素组成的连续序列

  • 要点 1:var arr[N]T,T 为数组类型,N 为长度,其中 N 只能是整型或者常量表达式。

  • 实际使用时,[N]可由[...]代替,go 编译器在编译时会自动识别数组长度

  • unsafe 包提供的 Sizeof 函数可以获得数组变量的大小,测试学习时,很有用

  • 代码案例

package main
import ( "fmt" "unsafe")
var arr = [...]float64{1, 2}
var arr2 = [...]int{ 99: 39,}
func main() { fmt.Println("数组") fmt.Println(len(arr))//2 fmt.Println(unsafe.Sizeof(arr2))//800 fmt.Printf("%T\n", arr2)//[100]int
}
复制代码

二、多维数组

  • 定义:数组类型自身也可以作为数组元素的类型,这样就会产生多维数组


  • 要点:数组类型是 Go 语言中最基础的复合数据类型。数组类型变量是一个整体,这就意味着一个数组变量表示的是整个数组。无论是参与迭代,还是作为实际参数传给一个函数 / 方法,Go 传递数组的方式都是纯粹的值拷贝,会带来较大的内存拷贝开销。为了避免这个问题,Go 提供了一种灵活的方式来解决——切片。这也是 Go 语言中最常用的同构复合类型

三、切片(slice)

  • 初识:切片和数组很像,在变量的生命上,切片只是少了一个“长度”属性

var arr = [2]int{1, 2} //声明数组var sli = []int{1,2} //声明切片
复制代码
  • 异同点

切片也可以通过 len 函数来获取长度,不同的是,切片支持动态添加元素,使用内置函数 append 可实现动态变化

package main
import ( "fmt" "unsafe")
var sli = []int{1, 2, 3}
func main() { fmt.Println("切片") fmt.Println(len(sli)) //3 sli = append(sli, 4, 5) fmt.Println(len(sli)) //5}
复制代码

四、切片的实现原理

不记了,传送门:https://time.geekbang.org/column/article/444348


好了,今天就到这里,最近项目有些紧,笔记记得也不太好,关于原理性的阐述,我暂时就没有深入思考,等后续有时间再来完善。

发布于: 刚刚阅读数: 2
用户头像

学着码代码,学着码人生。 2019.04.11 加入

狂奔的小码农

评论

发布
暂无评论
Go学习笔记——同构复合类型