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

Go语言学习笔记(3)

数组

Golang 中,数组是值类型。

数组的声明

数组的初始化

用 for-range 遍历数组

基本语法:

其中: 为数组下标, 是该下标位置的值。

长度是数组类型的一部分

长度是数组类型的一部分,就是说数组不可以脱离长度而存在。听起来不太明白,我们来看下面的一个示例就明白了,这真的是一个大坑。

假设,我们现在要写一个排序函数,C# 中,我们会这样定义:

但是,在 Golang 中,这是不行的。

这句编译就会报错:cannot use arr (type [3]int) as type []int in argument to Sort。因为 函数的参数 是一个切片,不是数组,将数组作为参数传给 就会报类型不匹配。

如果一定需要以数组作为参数传递, 的参数必须定义成数组,就是带上长度:

这么定义这函数还有啥用?吐槽一万字…

虽然有切片可以用来实现我们的功能,但是,数组就变得有点鸡肋了。

切片 slice

切片是引用类型,类似于 C# 中的 。内部维护一个数组,当追加元素超出切片容量时,切片自动扩容。(跟 是一样的机制。)

切片的声明

切片的使用

使用 初始化切片, 的三个参数依次为:切片数据类型,切片长度,切片容量。

给切片追加元素

函数也很搞笑,其返回值必须赋值给一个切片,否则编译都过不了。如果一个切片调用 追加元素后,又赋值给了自己(我们一般也是这么用的),则切片的地址不会发生改变(除非发生了扩容)。如果切片 1调用 后赋值给了切片 2,则切片 1保持未追加前的原样不变,另生成一个新的切片赋给切片 2。

示例:

映射 map

就是字典。

map 的声明

map 的使用

方法的第一个参数是 map 的数据类型,第二个参数是初始容量。

注意,如果是方式二直接赋值,最后一个key-value后面也要加逗号。

删除元素

参数:

map:要删除元素的 map

key:要删除的 key,当 key 在 map 中不存在时,不进行任何操作,也不报错。

Golang 中map没有类似其他语言中的 方法,如果要一次性删除全部元素,可遍历map逐一删除,或者重新 一下使其指向一个新的内存空间。

查找元素

遍历元素

只能用 for-range 遍历

结构体 struct

Golang 中没有类(class),Go 中的结构体(struct)和其他语言中的类有同等的地位。可以理解为 Golang 是基于 struct 来实现面向对象。

Golang 中面向对象编程非常简洁,去掉了传统 OOP 语言中的继承、方法重载、构造函数、析构函数、隐藏的 this 指针等等。

Golang 仍然有面向对象编程的封装、继承、多态的特性,只是实现方式和其他 OOP 语言不一样。

结构体是值类型。结构体的所有字段在内存中是连续的。

结构体的声明

结构体的使用

结构体指针

这三种方式定义的都是结构体指针,因为是指针,所以给字段赋值的标准方式应该是方式一的写法,但是 Go 的设计者为了程序员使用方便,给出了一个语法糖,使 简化为 ,即方式二的写法,编译时,会自动加上取值运算。而方式三的写法可以直接赋值。

结构体标签

struct的每个字段上可以定义一个标签(tag),该标签可以通过反射机制获取,最常见的使用场景就是序列化和反序列化。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190130G09COK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券