• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Go入门:一、变量和数据类型

Go 海叔叔 2天前 3次浏览 已收录 0个评论

这是学习Go语言的第一篇笔记,主要学习的是变量和基本数据类型。如果您也在开始学习Go语言,那么这篇笔记一定能帮助您学习的更快!
我的语言学习过程一般分为下面几个:

1. 变量和数据类型
2. 流程控制方法
3. 函数声明和调用
4. 面向对象
5. 语言特性
6. 标准库变量声明

变量声明

Go语言的变量声明有三种

第一种,var identifier type

开始实战一下!比如声明一个int类型变量

第二种,var identifier = value

第二种不显式声明类型直接赋值。Go语言可以自动推导变量类型。比如

第三种,identifier := value

第三种是用来声明一个新的变量,好处就是用这个可以避免覆盖前面有值的变量,保证这个变量一定是一个新的变量。
比如 i:=1。关于这种声明方式,如果之前已经声明过的变量,再次使用将会编译错误。比如

这种编译的时候会报错。
写一个完整的Go程序!

疑问,为什么变量声明要把类型放在变量后面呢?数据类型

Go是一种强类型的语言,不同的数据选择不同的类型能够有效利用内存!

字符串类型,字节类型,数字类型,布尔类型构成了Go语言的基础类型。这也是大多数语言的基础类型。
挑几个重点数据类型做笔记!字符串
字符串是一个非常常见的数据类型,几乎所有的语言都有这个数据类型。在Go语言中,字符串和数组类似,但是它是一个不可改变的数组!

概念:字符串是不可改变的字节序列!意味着字符串不可修改!

概念:指针变量存储的是一个变量的内存地址!只能把地址赋值给这种变量

比如定义一个int型的变量,var i int = 1,那么可以定义一个int类型的指针来指向i的地址

&为取地址运算,*为取地址中的值运算!常量

常量

和一般语言一致,常量是在运行时不可修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
声明一个常量

type可以省略,让编译器自动推导数组(定长数组)
数组实际上就是一堆同类型数据的集合,在内存中的位置也是连续的。定义一堆同类型的变量用数组再合适不过啦!

上面仅仅是声明了一个数组,并未赋值,因此直接访问会全部是0(数字类型的没有初始化总是0)。要赋值也很简单,直接 i[index] = value这种方式就可以赋值啦。

创建一个一维数组

创建一个多维数组

比如创建一个int类型的二维数组

数组的长度一旦声明就不可变,但是很多场景下需要让数组的长度随着程序的运行动态变化。因此Go提供了一个可变长度的数组,称为切片。

概念:切片是可变的数据类型 (联系一下字符串的不可变性)

实际上,这就定义了一个切片了。Go为切片定义了一系列能够修改数组的操作!

截取切片中的一段直接引用原数组,没有开辟新的内存,非常高效!在切片上追加一个新的值,只要切片容量足够就不会开辟新的内存空间!

Map(集合/索引数组/关联数组)

Map表示无序键值对集合。在其他语言中,通常也能看到这种身影,称呼可能有索引数组,字典等。不管称呼怎样,内部实现几乎是一致的,即通过hash表来实现。

实战演练一下!

Go语言为Map这种数据类型定义了一些操作,这些操作有:delete(删除操作)

还记得对于int,string等一些简单的类型我们可以用var i int, i = 1这种类似的方法去赋值,那么对于map这样可以吗?比如

这样会导致panic异常。空map是不允许直接赋值的。这里我们需要使用make来为map分配内存之后才可以进行赋值。

以下内容是学习函数后记下的笔记,如果您看到这儿,建议学习函数之后再回来看。变量作用域

变量作用域

Go语言变量作用域可分为:局部、全局。

全局变量

函数体外定义的变量为全部变量,在任何函数都可使用和被修改!

局部变量

函数内部定义的变量为局部变量,作用域只限于函数内!在函数体内,可以定义和全局变量一样的变量名,这是一个局部变量,并且在函数体内会被优先使用。

实战演练

以下内容是学习面向对象后记下的笔记,如果您看到这儿,建议看完面向对象之后再回来看。

Go Struct 复合数据类型

使用数组可以定义一组同数据类型的数据。不过如果要定义一本书,这本书有作者,标题,价格等信息,用单一类型显然就不能表示。这时候就需要使用符合数据类型。
Go语言中使用type来定义复合数据类型。

比如上面说的定义一本书

Go Interface 接口

Go Interface也是一个数据类型,看看怎样定义一个接口!

任何类型,只要实现了这个接口里面的方法,就相当于实现了这个接口。
实战演练一下


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址