首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go:学习笔记兼吐槽(3)

如果一定需要以数组作为参数传递,Sort 的参数必须定义成数组,就是带上长度: func Sort(array [3]int){ } 这么定义这函数还有啥用?...内部维护一个数组,当追加元素超出切片容量时,切片自动扩容。(跟 list 是一样的机制。)...= map[int]string{     1: "张三",     2: "李四", } make 方法的第一个参数是 map 的数据类型,第二个参数是初始容量。...删除元素 delete(map, key) 参数: map:要删除元素的 map key:要删除的 key,当 key 在 map 中不存在时,不进行任何操作,也不报错。...可以理解为 Golang 是基于 struct 来实现面向对象。 Golang 中面向对象编程非常简洁,去掉了传统 OOP 语言中的继承、方法重载、构造函数、析构函数、隐藏的 this 指针等等。

57620

如何在Go中使用切片容量和长度

切片和数组之间有很多区别,数组的长度是其类型的一部分,所以数组不能改变大小,而切片可以具有动态大小,因为切片是数组的包装。这是什么意思?假设我们有一个数组 vara[10]int。...第一个是我们要分配的类型,第二个是类型的长度,第三个是类型的容量(此参数是可选的)。 通过make([] int, 5),我们告诉程序要创建一个长度为5的切片,并且容量默认为提供的长度-在这里是5。...这种方法的缺点是我们必须跟踪 i,以便我们知道将每个值放入哪个索引。 这导致我们进入第二种方法 使用0作为长度,并指定容量 我们更新make调用,在切片类型之后为其提供两个参数。...首先,新切片的长度将设置为0,因此我们没有在切片中添加任何新元素。第二个参数是新切片的容量,将被设置为map参数的长度,因为我们知道切片最终的长度就是 map 的长度。.../p/nwT8X9-7eQ 在第一个代码示例中,我们的容量从0开始,然后增加到1、2、4,最后是8,这意味着我们必须在5个不同的时间分配一个新数组,此外,最后一个数组用于支持我们 slice的容量为8,

71110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Go语法指南

    返回值的名称应当具有一定的意义,可以作为文档使用。 没有参数的 return语句返回各个返回变量的当前值。这种用法被称作“裸”返回。 直接返回语句仅应当用在像下面这样的短函数中。...func append(s []T, vs ...T) []T append的第一个参数 s是一个元素类型为 T的 slice ,其余类型为 T的值将会附加到该 slice 的末尾。...切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。 本文将深入切片的本质,并讲解它的用法。 数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要先理解数组。...同样,不能使用小于零的索引去访问切片之前的元素。 切片的生长(copy and append 函数) 要增加切片的容量必须创建一个新的、更大容量的切片,然后将原有切片的内容复制到新的切片。...第一个是当前下标(序号),第二个是该下标所对应元素的一个拷贝。

    1.2K10

    Golang面试题集锦

    阅读量: 11 介绍下TCP 详解TCP连接的“三次握手”与“四次握手” 简单介绍一下Golang? 谷歌开发的一种系统编程语言。它具有内置的垃圾收集机制并支持并发。...cap()和len()函数的区别是什么? len()返回切片中的元素个数。 cap()返回切片的容量即切片可以容纳的元素数量。 哈希表或哈希映射允许快速查找。GO如何实现哈希映射?...golang的select就是监听IO操作,当IO操作发生时,触发相应的动作,每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作。 Go是否支持泛型?...它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。...make函数是内建函数,函数定义:func make(Type, size IntegerType) Type · 第一个参数是一个类型,第二个参数是长度 · 返回值是一个类型 make(T, args

    2.2K20

    Golang语言 ---切片:用法和本质

    切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。本文将深入切片的本质,并讲解它的用法。 数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要要理解数组。...(为了避免复制数组,你可以传递一个指向数组的指针,但是数组指针并不是数组。)可以将数组看作一个特殊的struct,结构的字段名对应数组的索引,同时成员的数目固定。...同样,不能使用小于零的索引去访问切片之前的元素。 切片生长(复制和追加) 要增加切片的容量必须创建一个新的、更大容量的切片,然后将原有切片的内容复制到新的切片。...使用 copy 函数,我们可以简化上面的代码片段: t := make([]byte, len(s), (cap(s)+1)*2) copy(t, s) s = t 一个常见的操作是将数据追加到切片的尾部...例如,FindDigits 函数加载整个文件到内存,然后搜索第一个连续的数字,最后结果以切片方式返回。

    1.2K70

    Go 语言入门三部曲(一):能看懂 Go 语言

    切片的底层 切片的默认行为 切片的长度与容量 nil 切片 用 make 创建切片 切片的切片 向切片追加元素 映射 映射基操 Range 函数 命名返回值 函数值 方法 接口 并发 Go 程 channel...一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。...为切片追加新的元素是种常用的操作,为此 Go 提供了内建的 append 函数。...func append(s []T, vs ...T) []T append 的第一个参数 s 是一个元素类型为 T 的切片,其余类型为 T 的值将会追加到该切片的末尾。...第一个参数是字符的索引,第二个是字符(Unicode的值)本身。

    49110

    golang中数组和切片到底有什么区别?

    数组大家都知道是具有「固定长度及类型的序列集合」,但是golang中又引入了「切片」,语法上看起来还和数组差不多,为什么会引入这些呢?切片和数组到底有什么区别呢?...切片之所以会诞生,是因为golang中数组存在很大的两个问题 固定的长度,这意味着初始化 array 后,不能再 push 超过 len(array) 长度的元素 array 作为参数在函数之间传递时是值传递...,相当于把数据copy了一份,具有很大的性能浪费 切片数据类型的底层结构 type slice struct { array unsafe.Pointer //指向一个数组的指针 len...左包含,右不包含原则」 s4从下标2开始截取,截取到下标4 s5省略了第一个参数,表示从下标0开始截取 s6省略了第二个参数,表示截取到最后一个元素 s7省略了两个参数,只填写了中间的冒号:,表示取全部元素...s5的长度为4,因为只有1 2 3 4这4个元素,容量为9,因为s5切片是从数组起始位置开始切割的:第一个元素是1,而s5底层数组a1最后一个元素是9,1~9共9个元素,所以s5的容量为9。

    66510

    通过示例学 Golang 2020 中文版【翻译完成】

    在切片中查找和删除 在数组中查找和删除 打印数组或切片元素 声明/初始化/创建数组或切片 将数组/切片转换为 JSON 追加或添加到切片或数组 结构切片 映射切片 通道的切片或数组 布尔值的切片或数组...创建整数切片或数组 创建浮点切片或数组 创建字符串切片或数组 排序切片的一部分 将一个切片追加或添加到另一个切片 映射 迭代映射的不同方法 映射的长度 映射 一种检查映射中是否存在键的有效方法 更新映射中的一个键...映射允许的键和值类型 创建/初始化/声明映射 映射和 JSON 的转换 将映射转换为 JSON 将 JSON 转换为映射 如何检查映射是否包含键 结构 结构 声明或创建/初始化结构变量 指向结构的指针...如何初始化具有数组或切片字段的结构 如何从另一个包访问结构 方法 方法 方法的指针接收器 非结构类型的方法 方法链 接口 接口 将接口作为参数传递给函数 接口到结构 嵌入接口 接口比较 接口的好处...复制函数 追加函数 上下文 使用上下文包——完整指南 GO 安装/设置 在 MAC 上安装 Golang 在 Linux 上安装 Golang 在 Windows 上安装 Golang 通道 通道

    6.2K50

    Golang语言情怀-第44期 Go 语言标准库翻译 builtin

    var nil Type // Type必须是指针、通道、函数、接口、映射或切片 nil是预定义的标识符,代表指针、通道、函数、接口、映射或切片的零值。...func make func make(Type, size IntegerType) Type 内建函数make分配并初始化一个类型为切片、映射、或通道的对象。其第一个实参为类型,而非值。...make的返回类型与其参数相同,而非指向它的指针。其具体结果取决于具体的类型: 切片:size指定了其长度。该切片的容量等于其长度。...) []Type 内建函数append将元素追加到切片的末尾。...若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。

    59830

    Golang 基础之内建函数使用 (一)

    size: 数据类型实际占用的内存空间长度,map、 channel 是可选参数,slice 是必要参数。 ...: 为数据类型提前预留的内存空间长度,可选参数。...这里 Type 是指类型,不是值 func new(Type) *Type // 函数原型 新的内置函数分配内存。第一个参数是类型,不是值,返回的值是指向新分配的零的指针这种类型的值。...如果该切片存储空间(cap)足够,就直接追加,长度(len)变长;如果空间不足,就会重新开辟内存,并将之前的元素和新的元素一同拷贝进去。...第三种方式 使用[]byte类型,将字符串类型追加 []byte数组 slice := append([]byte("帽儿山的枪手 "), "分享技术文章"...) append 返回值必须要有接收变量...func len(v Type) int // 函数原型 注意:结构体(struct)、整型布尔等不能作为参数传给len函数。

    26700

    Golang语言--slice 切片原理

    但是很多同学对slice 的模糊认识,造成认为golang中的数组是引用类型,结果就是在实际开发中碰到很多坑,以至于出现一些莫名奇妙的问题,数组中的数据丢失了。...接下来结合几个例子,了解下slice一些用法 声明一个Array通常使用 make ,可以传入2个参数,也可传入3个参数,第一个是数据类型,第二个是 len ,第三个是cap 。...如果不穿入第三个参数,则 cap=len ,append 可以用来向数组末尾追加数据。...可以看到指针地址0xc820012210 与 0xc820012218 相差 8byte 正好是一个int类型长度,cap也相应的变为4 就写到这里了,总结一下,切片的结构是指向数据的指针,长度和容量。...参考:https://blog.golang.org/go-slices-usage-and-internals 附上 go 源码中 slice 的数据结构定义 type slice struct {

    1K90

    Go——基础(2)

    更多类型:struct、slice和映射 指针 指针保存了值的内存的地址 *T是指向T的指针,零值为==nil== var p *int ==&操作符==会生成一个指向其操作数的指针 i:=2 p=&i...]int a[0:10] a[:10] a[0:] a[:]是等价的 切片的长度和容量 切片的长度:包含的元素个数 切片的容量:从第一个元素开始数,底层数组元素末尾的个数 用len(s)获取长度,cap..., []string{"_", "_", "_"}, } } 向切片追加元素 使用内建函数append函数为切片追加新的元素 func main (){ var s[]int...形式可以遍历切片或映射 当用for循环遍历切片时,每次迭代都会返回两个值,第一个为当前元素下标,第二个为该下标所对应元素的一份副本 var pow[]{1,2,3,4,5,6} func main ()...映射将键映射到值 映射的零值为nil,nil映射没有键,也不会添加键 make函数会返回给定类型的映射,并将其初始化备用 type Vertex struct{ Lat,Long float64 }

    27820

    学习使用Go的反射

    这将返回类型为 reflect.Type的变量,该变量具有获取定义时变量的类型的各种信息的方法集。下面我们来看一下常用的获取类型信息的方法。 我们要看的第一个方法是 Name()。...这将返回变量类型的名称。某些类型(例如切片或指针)没有名称,此方法会返回空字符串。 下一个方法,也是我认为第一个真正非常有用的方法是 Kind()。...Type是由Kind组成的---Kind 是切片,映射,指针,结构,接口,字符串,数组,函数,int或其他某种原始类型的抽象表示。...如果变量是指针,映射,切片,通道或数组变量,则可以使用 varType.Elem()找出指向或包含的值的类型。...一旦有了 reflect.Value实例就可以使用 Type()方法获取变量的 reflect.Type。 如果要修改值,请记住它必须是一个指针,并且必须首先对其进行解引用。

    1.1K10

    go面试题目收集

    数组 数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。 数组的长度是数组类型的一部分,所以[3]int 和 [4]int 是两种不同的数组类型。...; 切片是地址传递; 切片可以通过数组来初始化,也可以通过内置函数make()初始化.初始化时len=cap,在追加元素时如果容量cap不足时将按len的2倍扩容 (3)....make函数是内建函数,函数定义:func make(Type, size IntegerType) Type 第一个参数是一个类型,第二个参数是长度,返回值是一个类型 make(T, args)函数的目的与...IO问题 B. select机制最大的一条限制就是每个case语句里必须是一个IO操作 C. golang在语言级别支持select关键字 防止channel超时机制 有时候会出现协程阻塞的情况,可以使用...golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作 每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作 主协程如何等其余协程完再操作

    68552

    Go 语言之父详述切片与其他编程语言数组的不同

    Slices:切片头 切片是执行操作的地方,但是要充分利用它们,开发者必须准确了解它们的含义和作用。 切片是一种数据结构,描述与切片变量本身分开存储的数组的一段连续的部分,。切片不是数组。...调用该函数不会修改 slice 变量中存储的长度,因为传给该函数的是切片头的副本 (而不是原始头)。因此,如果我们要编写一个修改标头的函数,则必须像在此所做的一样,将其作为结果参数返回。...Copy 函数 在上一节中将切片的容量加倍时,我们编写了一个循环,将旧数据复制到新切片。Go 具有内置函数 copy,可简化此操作。它的参数是两个切片,它将数据从右侧参数复制到左侧参数。...就 Append的实现而言,这些参数正是一个 int 型切片,如您所见: // Append将项目追加到切片 //第一个版本:只是循环调用Extend。...是必须的! fmt.Println(slice1) 当然,我们可以在 Extend的内部基础上分配不超过一次的分配来提高 Append的效率: // Append 将元素追加到切片 //高效的版本。

    1.1K30

    Go语言基础4 - 数据(基本数据结构)

    切片、映射和信道 本质上为引用数据类型,在使用前必须初始化。 例如,切片是一个具有三项内容的描述符,包含一个指向(数组内部)数据的指针、长度以及容量, 在这三项被初始化之前,该切片为 nil。...向切片追加东西的很常用,因此有专门的内建函数 append。 一般情况下,如果我们要写一个 append 方法的话,最终返回值必须返回切片。...二维切片 要创建等价的二维数组或切片,就必须定义一个数组的数组, 或切片的切片,示例: type Transform [3][3]float64 // 一个 3x3 的数组,其实是包含多个数组的一个数组...与切片一样,映射也是引用类型。 如果将映射作为参数传入函数中,并更改了该映射的内容,则此修改对调用者同样可见。...我们必须返回结果, 原因是,底层数组可能会被改变(注意数组的长度是类型的一部分)。

    77600

    Go语言切片面试真题8连问

    ,在某些场景下使用起来就不是很方便,所以Go语言提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素。...实际上不会,因为切片本质内部结构如下: type SliceHeader struct { Data uintptr Len int Cap int } 切片中的第一个字是指向切片底层数组的指针...进行内存对齐之后,新 slice 的容量是要 大于等于 老 slice 容量的 2倍或者1.25倍。...当切片作为参数传递时,其实就是一个结构体的传递,因为Go语言参数传递只有值传递,传递一个切片就会浅拷贝原切片,但因为底层数据的地址没有变,所以在函数内对切片的修改,也将会影响到函数外的切片,举例: func...inner slice: [asong Golang梦工厂] 因为切片发生了扩容,函数外的切片指向了一个新的底层数组,所以函数内外不会相互影响,因此可以得出一个结论,当参数直接传递切片时,如果指向底层数组的指针被覆盖或者修改

    68230
    领券