golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。
类声明
type Poem struct { Title string Author string intro string }
这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。
类方法声明
func (poem *Poem) publish() { fmt.Println("poem publish") }
或者
func (poem Poem) publish() { fmt.Println("poem publish") }
和其它语言不一样,golang声明方法和普通方法一致,只是在func后增加了poem *Poem这样的声明。加*和没有加*的区别在于一个是传递指针对象,一个是传递值对象。
实例化对象
实例化对象有好几种方式
poem := &Poem{} poem.Author = "Heine" poem2 := &Poem{Author: "Heine"} poem3 := new(Poem) poem3.Author = "Heine" poem4 := Poem{} poem4.Author = "Heine" poem5 := Poem{Author: "Heine"}
实例化的时候可以初始化属性值,如果没有指明则默认为系统默认值
加&符号和new的是指针对象,没有的则是值对象,这点和php、java不一致,在传递对象的时候要根据实际情况来决定是要传递指针还是值。
tips:当对象比较小的时候传递指针并不划算。
构造函数
查看官方文档,golang并没有构造函数一说。如果一定要在初始化对象的时候进行一些工作的话,可以自行封装产生实例的方法。
func NewPoem(param string, p ...interface{}) *Poem
示例:
func NewPoem(author string) (poem *Poem) { poem = &Poem{} poem.Author = author return } poem6 := NewPoem("Heine")
继承
确切的说golang中叫做组合(composition)
type Poem struct { Title string Author string intro string } type ProsePoem struct { Poem Author string }
ProsePoem属性中声明了Poem,表示组合了Poem的属性和方法。可以像如下方式调用:
prosePoem := &ProsePoem{} prosePoem.author = "Heine"
如果其中属性有冲突,则以外围的为主。
type ProsePoem struct { Poem Author string }
当访问Author的时候默认为ProsePoem的Author,如果需要访问Poem的Author属性可以使用prosePoem.Poem.Author来访问。
prosePoem := &ProsePoem{} prosePoem.Author = "Shelley" prosePoem.Poem.Author = "Heine" fmt.Println(prosePoem)
从输出中可以很直观看到这一点。
&{{ Heine } Shelley}
方法的继承和属性一致,这里不再罗列。通过组合的话可以很好的实现多继承。
方法重载
方法重载就是一个类中可以有相同的函数名称,但是它们的参数是不一致的,在java、C++中这种做法普遍存在。golang中如果尝试这么做会报重新声明(redeclared)错误,但是golang的函数可以声明不定参数,这个非常强大。
func (poem *Poem) recite(v ...interface{}) { fmt.Println(v) }
其中v …interface{}表示参数不定的意思,其中v是slice类型,fmt.Println方法也是这样定义的。如果要根据不同的参数实现不同的功能,要在方法内检测传递的参数。
接口
关于面向对象中还一个重要的东西就是接口了,golang中的接口和其它语言都不太一样,是golang值的称道设计之一。详细了解接口还需要一段时间,下次再分享吧。
完整的示例代码下载:golang面向对象示例代码
<!-- 336x280 --> <iframe id="aswift_1" style="left: 0px; top: 0px; position: absolute;" name="aswift_1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="336" height="280"></iframe>转载请注明:快乐编程 » golang面向对象思想和实现
相关推荐
总的来说,"桫哥-GOlang-05面向对象"课程将带领你学习如何在Go语言中运用面向对象的思想进行开发,包括结构体、方法、接口、组合以及错误处理等多个方面。通过学习,你将能够利用Go语言的特性写出高效、可读性强且...
在本文中,我们将深入探讨基于epoll协程池的Golang网络库的实现与应用,主要涉及Golang的网络编程和epoll事件模型。epoll是Linux系统提供的一种高效I/O事件通知机制,而协程池则是一种优化并发处理的技术。这种结合...
4. **面向对象支持**:尽管Golang没有传统意义上的继承机制,但它通过**structs**和**methods**提供了一种简单而强大的面向对象编程支持。这种简化的方法有助于减少代码中的冗余和提高可读性。 5. **错误处理**:...
Java是一种广泛应用的面向对象语言,拥有丰富的类库和强大的跨平台能力。在LeetCode的Java解题中,会涉及到类、接口、泛型等面向对象概念,以及ArrayList、LinkedList、HashMap等数据结构的使用。此外,Java的异常...
3. 基于接口的面向对象:Go语言没有类,而是使用接口来实现多态,这提供了更大的灵活性。 4. 类型系统:Go语言有严格的类型检查,有助于减少错误。 5. 标准库:Go语言的标准库非常丰富,包括网络、加密、操作系统...
1. **学习基本语法**:包括变量、常量、函数、控制结构、面向对象编程等。 2. **理解并发编程**:熟悉goroutines和channels的用法,以及如何实现线程安全的数据共享。 3. **掌握标准库**:了解并使用常用的包,如`...
3. **结构体与接口**:理解Go中的结构体用于组织数据,接口则提供了一种抽象的类型系统,有助于实现面向对象编程。 4. **Go的工作环境**:设置Go的开发环境,熟悉Go工具链,包括go build、go run、go test等命令。 ...
2. **面向对象编程**:理解Go中的接口(Interface)和结构体(Struct),如何创建和使用它们来实现面向对象的设计思想,以及接口的动态绑定特性。 3. **包管理与模块系统**:了解Go的包导入机制,使用`go mod`进行...
这个挑战的目的是促进对逻辑编程和函数式编程的理解,同时也强化面向对象编程和过程式编程的技巧。 描述中提到的“99个问题”起源于Prolog编程领域,是一系列递增难度的编程题目,旨在帮助开发者加深对Prolog语言...
Go的面向对象特性,如接口和组合,可以帮助我们构建可复用和灵活的代码。 数据库集成也是关键部分,Go语言支持多种数据库驱动,如MySQL、PostgreSQL、SQLite等,可以根据需求选择合适的数据库来存储系统数据。 ...
这体现了Golang中的面向对象编程思想。 3. **错误处理**:Go语言使用`error`类型进行错误处理,通常函数会返回一个错误值,调用者需要检查并适当地处理错误。在城市卡丁车问题中,可能会遇到各种错误,如赛道超出...
学习Java需要掌握面向对象编程思想,了解类和对象的创建与使用,以及异常处理机制。 2. **Python** Python以其简洁明了的语法和丰富的库支持,成为数据科学、Web开发和自动化脚本的首选语言。理解Python的变量、...
此外,还需要利用Go的结构体和面向对象编程思想来定义蛇、食物、边界等游戏元素。同时,游戏的逻辑处理,如蛇的移动、碰撞检测、分数计算等,都是通过函数实现的。为了实现游戏界面,Go可以借助第三方库如`github....
3. **面向对象编程**:Go语言中的接口和结构体,以及如何利用它们实现面向对象的设计思想。 4. **并发编程**:Go语言的一大特色是其内置的goroutines和channels,漫画会用简单易懂的方式解释它们如何帮助开发者编写...
它的设计灵感来源于C语言,同时融合了多种现代编程思想,如面向对象、函数式编程和并发处理。Go语言以其简洁、高效和强大的并发支持而受到广泛关注,尤其适合于构建高性能服务器、分布式系统以及网络应用程序。 为...
**匿名字段、方法、继承与重写、方法值与表达式、接口**:这部分涵盖了面向对象编程的核心概念,Go的接口实现多态,而方法和表达式展示了Go的面向对象特性。 36-38. **多态、空接口和类型断言**:多态允许不同类型...
例如,在建造者模式的案例中,通过构建不同类型的消息(命令消息、带头部的消息、多部分消息)来展示如何抽象和实现对象的构建步骤。这样的案例不仅有助于读者理解设计模式,还能教会他们如何将这些模式运用到具体的...
- **Golang的核心特性**:在Golang中,对象表现为类,具有属性(成员变量)和行为(成员函数),同时支持自主性和并发操作(通过协程实现)。此外,接口和函数变量的使用使得代码更加职能化和松散耦合,而channel则...
- **面向对象编程**:Go语言的接口和结构体设计,以及如何实现面向对象编程的思想。 - **并发编程**:详细讲解goroutines和channels的使用,以及互斥锁、条件变量等同步原语。 - **内存管理**:介绍Go的内存分配策略...