成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go語言中的面向對象編程(OOP)

開發 前端
數據抽象是一種設計模式,其中數據僅對語義相關的函數可見,以防止誤用。數據抽象的成功導致在面向對象和純函數式編程中頻繁地將數據隱藏作為設計原則。

在Go語言中,雖然沒有像面向對象語言那樣的類,但通過結構體類型和方法,仍然支持部分面向對象編程(OOP)的概念。

封裝(Encapsulation)

封裝是一種將一個對象的實現細節隱藏起來,使其對其他對象不可見的做法,這樣可以實現解耦。

例如,考慮以下結構體:

type Student struct{
  name string
  rollNo uint64
}

其中的name和rollNo字段是私有的,因為它們以小寫字母開頭。為了提供公共訪問,可以為這些字段定義對應的getter和setter方法。

func (s *Student) GetName() string {
  return s.name
}

func (s *Student) SetName(name string) {
  s.name = name
}

func (s *Student) GetRollNo() uint64 {
  return s.rollNo
}

func (s *Student) SetRollNo(roll uint64) {
  s.rollNo = roll
}

現在,程序的其他部分也可以創建Student結構體的對象,并通過公共的getter和setter方法訪問name和rollNo,從而實現了封裝。

抽象(Abstraction)

數據抽象是一種設計模式,其中數據僅對語義相關的函數可見,以防止誤用。數據抽象的成功導致在面向對象和純函數式編程中頻繁地將數據隱藏作為設計原則。

在Go語言中,可以通過接口實現抽象。接口定義了一組必須實現的方法,以滿足接口的要求。

例如,考慮以下接口:

type iStudent interface{
  calcPercentage() float64
}

該接口定義了一個名為calcPercentage()的方法,用于計算學生的百分比。

繼承(Inheritance)

在Go語言中,不支持傳統意義上的繼承。相反,Go使用組合來實現類似的功能。一個結構體可以嵌入另一個結構體,從而繼承其字段和方法。

例如,考慮以下結構體:

type Person struct {
 name string
 age  uint64
}

type Student struct {
 Person
 studentID uint64
}

在這里,Student結構體嵌入了Person結構體,這意味著它繼承了Person的name字段。Student結構體還有自己的studentID字段。現在,任何對Person操作的方法也可以對Student操作,因為Student是一個帶有額外字段的Person。

多態(Polymorphism)

多態是指調用代碼可以獨立于所支持層次結構中的類(父類或其子類)而運行的情況。

在Go語言中,可以通過使用接口來實現多態。由于Go是一種靜態類型的語言,變量的類型必須在編譯時已知。然而,通過使用接口,可以編寫可以在滿足相同接口要求的不同類型上操作的代碼,而無需在編譯時知道其具體類型。

例如,考慮以下代碼:

func PrintStudentDetails(s *Student) {
  fmt.Println("Student Name:", s.GetName())
  fmt.Println("Student Age:", s.GetAge())
  fmt.Println("Percentage",s.CalcPercentage())
}

現在,我們可以將任何實現了PrintStudentDetails()方法的類型作為參數調用該函數,比如Student類型,它會顯示該學生的詳細信息。這就是多態的實現。

完整的面向對象編程在Go中的示例:

package main

import "fmt"

type Shape interface {
 Area() float64
}

type Triangle struct {
 Base, Height float64
}

func (t Triangle) Area() float64 {
 return 0.5 * t.Base * t.Height
}

type Square struct {
 Side float64
}

func (s Square) Area() float64 {
 return s.Side * s.Side
}

type Rectangle struct {
 Length, Breadth float64
}

func (r Rectangle) Area() float64 {
 return r.Length * r.Breadth
}

func printArea(s Shape) {
 fmt.Println("Area of shape is : ", s.Area())
}

func main() {
 t := Triangle{Base: 10, Height: 20}
 printArea(t)    //Area of shape is :  100

 s := Square{Side: 20}
 printArea(s)    //Area of shape is :  400

 r := Rectangle{Length: 20, Breadth: 10}
 printArea(r)    //Area of shape is :  200
}
責任編輯:武曉燕 來源: 愛發白日夢的后端
相關推薦

2024-04-02 07:32:58

Go語言接口

2020-07-24 09:40:04

C語言OOP代碼

2010-08-24 16:00:43

C語言

2011-04-02 09:07:46

OOP

2024-03-26 11:54:35

編程抽象代碼

2025-04-02 03:11:00

Python函數C++

2023-02-16 09:55:24

對象編程OOP

2021-05-28 05:34:06

Golang語言編程

2013-03-11 09:23:22

Go語言面向對象

2024-04-07 11:33:02

Go逃逸分析

2021-07-15 23:18:48

Go語言并發

2023-12-21 07:09:32

Go語言任務

2023-11-30 08:09:02

Go語言

2022-07-19 12:25:29

Go

2021-06-08 07:45:44

Go語言優化

2023-07-29 15:03:29

2021-11-08 07:48:48

Go語言對象

2022-09-29 10:01:05

Go編程語言文本文件

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對象編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品1区2区3区 | 国产精品国产精品国产专区不卡 | 黄视频免费在线 | 国产精品美女一区二区 | 18gay男同69亚洲网站 | 丝袜天堂 | 一级毛片免费 | 在线小视频 | 久久成人一区 | 久久一区精品 | 综合在线视频 | 成人在线播放网站 | 69性欧美高清影院 | 久久精品视频在线免费观看 | 懂色av蜜桃av | 国产精品久久久久久中文字 | 亚洲精品国产一区 | 精产国产伦理一二三区 | 日韩小视频 | 国产精品久久久乱弄 | 99精品欧美一区二区蜜桃免费 | 91社影院在线观看 | 精品久久久久一区二区国产 | 日韩一区在线观看视频 | 亚洲精品无 | 久久草视频| 精品久久久久一区二区国产 | 91视视频在线观看入口直接观看 | 欧产日产国产精品99 | av在线播放网 | 中文字幕日韩一区 | 九九九视频在线观看 | 久久久91精品国产一区二区三区 | 男女网站免费观看 | 国产日韩精品一区二区 | 亚洲一区二区三区在线观看免费 | 成人av网页 | 精品国产一区二区三区日日嗨 | 亚洲精品久久久一区二区三区 | 国产精品不卡 | 性做久久久久久免费观看欧美 |