前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言示例学习05-指针/结构体/方法/接口

Go语言示例学习05-指针/结构体/方法/接口

作者头像
用户5252199
发布2022-04-18 18:42:06
1930
发布2022-04-18 18:42:06
举报

一、Go支持指针,允许在程序中通过引用传递值或者数据类型

在这里我们分别创建两个包含值类型和引用类型参数的函数

代码语言:javascript
复制
func zeroval(ival int)  {   
ival = 0
}
func zeroptr(iptr *int)  {   *iptr = 0}

上面中,zeroval的参数是值类型,zeroptr的参数是引用类型

那么在这里我们声明一个变量

代码语言:javascript
复制
i := 1

分别的赋值给这两个函数调用看一下效果

代码语言:javascript
复制
i := 1
fmt.Println("initial : " , i)  // print 1
zeroval(i)
fmt.Println("initial : " , i)  // print 1    
zeroptr(&i)
fmt.Println("zeroptr",i)    // print 0
fmt.Println("zeroptr_&",&i)  // print 0xc000090018

从上面可以看出值类型传递的参数值没有发生改变,依旧是1

而指针类型的参数值则发生了改变

在上面 *i 是创建了一个指针类型,&i 是获取指针的地址中的值,在上面示例中&i取到i的指针地址值

然后在zeroptr函数中将地址的地址的值重新赋予了一下

二、结构体

Go支持一个叫做结构体的类型,相比于java来讲就是实体类

在Go中声明一个结构体使用 type 结构体名称 struct {}

比如:

代码语言:javascript
复制
type person struct {   
name string   
age  int
}

person 结构体包含了 name 和 age 两个字段

结构体的赋值和使用

代码语言:javascript
复制
fmt.Println(person{"bob", 23})
代码语言:javascript
复制
// 初始化一个结构体元素时指定字段名字
fmt.Println(person{name: "alice", age: 18})
代码语言:javascript
复制
// 省略的字段将被初始化为零值
fmt.Println(person{name: "fuck”})
代码语言:javascript
复制
// & 前缀生成一个结构体指针
fmt.Println(&person{name: "bob", age: 23})

三、方法

Go支持在结构体类型中定义方法

方法在func关键字和方法名中间加入了一个特殊的接收器类型,接收器可以是结构体类型或者是非结构体类型

接收器是可以在方法的内部访问的

创建方法的语法:

rect是一个结构体

area() 方法将rect作为一个接收器类型

代码语言:javascript
复制
func (r *rect) area() int  {   
return r.height + r.width}
r := rect{
width: 10, 
height: 12
}
r.area()
fmt.Println("area: ", r.area())

四、接口

在Go语言中,接口 是方法特征的命名集合

声明一个几何体接口

在Go语言中,可以通过type 接口名称 interface 的方式定义接口

在接口中,可以指定多个方法

在方法实现接口时,需要实现接口下面的所有方法

比如

定义一个geometry接口

代码语言:javascript
复制
type geometry interface {   
area() float64   
perim() float64
}

定义一个rect结构体

代码语言:javascript
复制
type rect struct {   width, height float64}

这里rect实现了接口geometry的方法,area和perim

代码语言:javascript
复制
func (r rect) area() float64  {   return r.width + r.height}func (r rect) perim() float64  {   return 2 * r.width + 2 * r.height}

学习网址:

https://books.studygolang.com

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术博文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档