教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang接口 interface 和结构体struct

Golang接口 interface 和结构体struct

发布时间:2022-02-21   编辑:jiaochengji.com
教程集为您提供Golang接口 interface 和结构体struct等资源,欢迎您收藏本站,我们将为您提供最新的Golang接口 interface 和结构体struct资源
<h1></h1> <h1>前言</h1>

如果说最纯粹的面向对象语言,我觉得是Java无疑。而且Java语言的面向对象也是很直观,很容易理解的。class是基础,其他都是要写在class里的。


<span style="color:#999aaa;">提示:以下是本篇文章正文内容,下面案例可供参考</span>

<h1>
一、Golang有类(class)吗?</h1>

Golang没有类(class)。

Golang中并没有明确的面向对象的说法,不能算是一种面向对象的语言。因为:

<ol><li>

Golang只支持封装,不支持继承和多态

</li><li>

Golang只有<span style="color:#f33b45;">struct</span>,没有class

</li><li>

Golang并没有构造函数和析构函数的概念,这和Go语言的内存回收机制有关系。

对于析构函数,Go提供了defer的关键字,它只要在函数内部实现,等到函数运行结束时便会被自动调用。<span style="color:#f33b45;">defer</span>有点像析构函数,但是却不是,因为它的作用范围是函数级别。(后续会整理defer )

当然Go也可以采取其他手段模拟构造函数和析构函数,不过笔者觉得最好不这么做,既然Go特意这么设计,就不希望如此实现。

</li></ol>

实在要扯上的话,可以将struct比作其它语言中的class。

类声明

这样就声明了一个类,其中没有public、protected、private的的声明。

golang用另外一种做法来实现属性的访问权限:属性的开头字母是<span style="color:#f33b45;">大写</span>的则在其它包中<span style="color:#f33b45;">可以被访问</span>,否则只能在本包中访问。类的声明和方法亦是如此。

<blockquote>

  func (r ReceiverType) funcName(parameters) (results)

</blockquote>

类方法声明

或者

和其它语言不一样,golang声明方法和普通方法一致,只是在func后增加了poem Poem这样的声明。加和没有加*的区别在于一个是传递指针对象,一个是传递值对象。

<h1>
二、编写People接口和结构体</h1> <h2></h2>

<span style="color:#999aaa;">代码如下(示例):</span>

<pre><code class="language-Go">package main import "fmt" //接口定义:人的功能 type PeopleFer interface { //说 Say() //讲中文 SayChinese() //跑 Run() //跳 Jump() } // 结构体声明: 人 type People struct { Name string "名字" Age int "年龄" Sex string "性别" BloodType string "血型" } // 接受者 人,实现say ( p *People 指针接收着 ) func (p *People) Say() { fmt.Printf("%v 可以说话 say \n", p.Name) } // 接受者 人,实现say ( p People 值接收着 ) func (p People) SayChinese() { fmt.Printf("%v 可以说中文 say \n", p.Name) } // 接受者 人,实现Run func (p *People) Run() { fmt.Printf("%v 可以跑 run\n", p.Name) } // 接受者 人,实现Jump func (p *People) Jump() { fmt.Printf("%v 可以跳 jump\n", p.Name) } // 实现方法,参数 接口,返回接口 func Impl(x PeopleFer) PeopleFer { fmt.Print("Impl() 实现方法,参数 接口,返回接口 \n") return x } func main() { var zSan = People{"张三", 20, "男", "O型"} fmt.Println(zSan) //指针接收者 var zSanImpl = Impl(&zSan) zSanImpl.Say() zSanImpl.Run() zSanImpl.Jump() //值接受者 zSanImpl.SayChinese() fmt.Println("------------------------------------------------") zSan = People{"李四", 12, "女", "A型"} fmt.Println(zSan) zSanImpl = Impl(&zSan) zSanImpl.Say() zSanImpl.Run() zSanImpl.Jump() zSanImpl.SayChinese() } </code></pre>

<span style="color:#999aaa;">代码运行输出(如下):</span>

参考链接:https://www.cnblogs.com/xxnn/p/10552819.html

 

到此这篇关于“Golang接口 interface 和结构体struct”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
interface作为struct field,谈谈golang结构体中的匿名接口
golang 结构体的嵌入类型和接口
Go语言函数类型实现接口
2020-10-18Go语言接口
Go 接口应用场景、注意事项和使用细节
【Golang】go语言面向接口
Go 之 interface接口理解
golang 面试题(十三)interface内部结构和nil详解
Golang 接口 & 指针
Go接口(Interface)的使用方法

[关闭]
~ ~