03Go指针

Go语言基础之指针

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。

要搞明白语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值

Go语言中的指针

任何程序数据载入内存后,在内部都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要

指针变量。

比如,“”“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话就要加载到内存中,我在

程序中吧这段话赋值给变量A,把内存地址复制给变量B,这时候B就是一个指针变量。通过变量A和变量B都能

找到我的座右铭。

Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号

& 取地址 * 根据地址取值

指针地址和指针类型

每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中会用&字符放在变量

前面对变量进行 取地址操作,Go语言中的值类型 int float bool string  array struct 都有对应的指针类型,

如 *int *int64 *string 等

取变量指针的语法如下

ptr := &v

其中

ptr := &v

v:代表被取地址的变量,类型为T

ptr:用于接收地址的变量,ptr的类型就为*T,称作T的指针类型。*代表指针

Go 语言基础之结构体

Go语言中没有类的概念,也不支持 类的继承等面向对象的概念,Go语言中通过结构体的内嵌在配合接口比面向对象

具有更高的扩展性和灵活性

类型别名和自定义类型

自定义类型

在Go语言中有一些基本的数据类型,如string, 整型 浮点型 布尔型 等数据类型,Go语言中可以使用type关键字来定义自定义类型。

自定义类型是定义了一个全新的类型,我们可以基于内置的基本类型定义,也可以通过struct定义。例如:

type MyInt int 

通过type 关键字的定义,MyInt就是一种新的类型,它具有int的特性。

类型别名

类型别名是Go1.9版本添加的新功能

类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型

type TypeAlias = type

结构体

Go语言中的基本数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,

这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个

基本数据类型,这种数据类型叫结构体,英文名称struct .也就是我们可以通过struct 来定义自己的类型了

Go语言中通过struct 来实现面向对象。

结构体的定义

使用type和struct 关键字来定义结构体,具体代码格式如下

type 类型名 struct {

  字段名 字段类型

  字段名 字段类型

}

其中:

类型名: 标识自定义结构体的名称,在同一个包内不能重复

字段名:标识结构体字段名。结构体中的字段名必须唯一

字段类型:标识结构体字段的具体类型

方法和接受者

Go语言中的方法 Method 是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者Receiver .接收者

的概念就类似于其他语言中的this 或者 self

方法的定义格式如下:

func (接收者变量 接收者类型) 方法名(参数列表)(返回参数) {

  函数体

}

其中,

接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名称首字母的小写,而不是self this 

之类的命名。例如 Person 类型的接收者变量应该命名为p,Connector类型的接收者变量应该命名为c等。

接收者类型:接收者类型和参数类似,可以是指针类型和非指针类型

方法名 参数列表 返回参数 具体格式与函数定义相同

 

posted @ 2021-01-18 08:15  zhangsima  阅读(58)  评论(0编辑  收藏  举报