Go Web编程实战(5)----面向对象编程(一)

简介: Go Web编程实战(5)----面向对象编程(一)

前言


Go语言中,并没有类的概念,但这并不意味着Go语言不支持面向对象编程,毕竟面向对象只是一种编程思想。


封装


属性

其实,学习过C语言都应该清楚,结构体是一个类类的结构,也就是说结构体是类的一种简化形式。所以,如果我们需要使用Go语言定义一个三角形类,可以这样写:

type Triangle struct {
  Bottom float32
  Height float32
}


方法

既然有了类,那类的方法如何定义呢?其实Go语言中,也有方法。


方法是作用在接收者上的一个函数,接收者是某种类型的变量。因此,方法是一种特殊类型的函数。示例如下:

//语法
func (recv recv_type)methodName(parameter_list)(return_value_list){
  //方法内容
}
//示例
type Triangle struct {
  Bottom float32
  Height float32
}
func (t *Triangle) Area() float32 {
  return (t.Bottom * t.Height) / 2
}
func main() {
  r :=Triangle{6,8}
  fmt.Println(r.Area())
}


以上代码运行的结果为:24


访问权限

在许多面向对象的语言中,属性与方法都有私有与公有的区别,这就是访问权限。比如Java,可以用public、private来定义访问权限。


但Go语言肯定是没有public与private,它是通过字母大小写来控制访问权限的。大家也会发现,我们上面的Bottom与Height都是大写,所以大写是公有属性,小写是私有。


这里就不举例了,大家可以通过编译器试试,可以发现小写的,根本不会提示。强制写入代码运行,肯定也会报错。


另外,我们还常常在Java语言的实体类中,定义get与set方法。下面,我们来通过Go语言实现get与set方法:

type Triangle struct {
  bottom float32
  height float32
}
func (s *Triangle) GetBottom() float32  {
  return s.bottom
}
func (s *Triangle) SetBottom(bottom float32){
  s.bottom=bottom
}
func main() {
  r :=Triangle{6,8}
  r.SetBottom(8)
  fmt.Println(r.GetBottom())
  fmt.Println(r.bottom,r.height)
}


继承

在Go语言中,同样也没有继承关键字extend,而是使用在结构体中内嵌匿名类型的方法来实现继承。例如,顶一个动物接口和一个老虎结构体,让老虎结构体包含一个动物接口的匿名字段。

type Animal interface {
  GetName()
  SetName()
}
type Tiger struct {
  Animal
}
func (t *Tiger) Working()  {
  t.GetName()
  t.SetName()
}


多态

在面向对象中,多态的特征是不同对象中同种行为的不同实现方式。在Go语言中,可以使用接口实现这个特征。示例如下:

//三角形结构体
type Triangle struct {
  Bottom float32
  Height float32
}
//正方体结构体
type Cube struct {
  sideLen float32
}
//定义了一个包含Area()方法的接口Shape,让三角形与正方行都实现这个接口里的Area()方法。
type Shape interface {
  Area() float32
}
func (t *Triangle) Area() float32 {
  return (t.Bottom * t.Height) / 2
}
func (c *Cube) Area() float32  {
  return c.sideLen * c.sideLen
}
func main() {
  r :=&Triangle{6,8}
  c :=&Cube{5}
  s :=[]Shape{r,c}
  for n,_ :=range s{
  fmt.Println("图形数据:",s[n])
  fmt.Println("图形面积",s[n].Area())
  }
}


如上面代码所示,通过不同对象调用Area()方法,产生了不同的接口,间接实现的多态。

相关文章
|
23天前
|
自然语言处理 Java 数据库连接
掌握JSP页面编程:动态生成Web内容
【4月更文挑战第3天】Java Server Pages (JSP) 是一种用于创建动态Web内容的Java技术,它结合HTML并允许在页面中嵌入Java代码。JSP支持代码片段、表达式语言(EL)和JSTL标签库,简化动态内容生成。当服务器接收到请求时,执行JSP中的Java代码并将结果嵌入HTML返回给客户端。示例展示了如何显示当前日期和时间。JSP可与Servlet、JavaBeans、数据库等结合,用于构建功能丰富的交互式Web应用。
掌握JSP页面编程:动态生成Web内容
|
1月前
|
负载均衡 Java 中间件
使用Go语言构建高性能Web服务
Go语言作为一种快速、高效的编程语言,其在构建高性能Web服务方面具有独特优势。本文将探讨如何利用Go语言开发和优化Web服务,以实现更高的性能和可伸缩性。
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
1月前
|
SQL 前端开发 Go
编程笔记 GOLANG基础 001 为什么要学习Go语言
编程笔记 GOLANG基础 001 为什么要学习Go语言
|
21小时前
|
SQL 关系型数据库 MySQL
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
|
22天前
|
存储 安全 编译器
掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)
掌握Go语言:精通Go语言范围(range),高级应用及进销存系统实战(25)
N..
|
1月前
|
JavaScript 前端开发 PHP
web编程的正则表达式
web编程的正则表达式
N..
10 1
|
1月前
|
设计模式 缓存 安全
一篇文章带你吃透Go语言的Atomic和Channel--实战方法
一篇文章带你吃透Go语言的Atomic和Channel--实战方法
29 0
|
1月前
|
安全 数据库 开发工具
Django实战:从零到一构建安全高效的Web应用
Django实战:从零到一构建安全高效的Web应用
48 0
|
1月前
|
SQL 机器学习/深度学习 缓存
Go语言Web应用实战与案例分析
【2月更文挑战第21天】本文将通过实战案例的方式,深入探讨Go语言在Web应用开发中的应用。我们将分析一个实际项目的开发过程,展示Go语言在构建高性能、可扩展Web应用方面的优势,并分享在开发过程中遇到的问题和解决方案,为读者提供宝贵的实战经验。