亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Go 語言中的結(jié)構(gòu)體和“面向?qū)ο蟆?/h1>

本文主要來講解一下 Go 語言的結(jié)構(gòu)體數(shù)據(jù)類型,以及 Go 語言中的"面向?qū)ο?,為什么要加雙引號呢?因為 Go 語言中沒有明確的面向?qū)ο蟮母拍睿?dāng)然也沒有明確的面向過程的概念。面向哪一方面編程完全取決于你如何使用,如果你想要面向?qū)ο缶幊蹋珿o 語言中提供了相對應(yīng)的解決方案來模擬面向?qū)ο蟆?/p>

 

1. 結(jié)構(gòu)體類型

想要模擬面向?qū)ο缶褪紫纫私庖幌?Go 語言中的結(jié)構(gòu)體類型。當(dāng)你需要兩個以上的基本數(shù)據(jù)類型或自定義類型來聲明定義函數(shù)的時候,你就可以使用結(jié)構(gòu)體。結(jié)構(gòu)體變量使用struct{...}的形式來定義。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? "fmt"
  • 5? ? ? ? ? "reflect"
  • 6? )
  • 7
  • 8? func main() {
  • 9? ? ? ? ? var student1 struct {
  • 10? ? ? ? ? ? ? ? Name string
  • 11? ? ? ? ? ? ? ? Age int
  • 12? ? ? ? }
  • 13? ? ? ? student1.Name = "Codey"
  • 14? ? ? ? student1.Age = 18
  • 15
  • 16? ? ? ? fmt.Println("student1數(shù)據(jù)類型:", reflect.TypeOf(student1))
  • 17? ? ? ? fmt.Println("student1的值:", reflect.ValueOf(student1))
  • 18
  • 19? ? ? ? student2 := struct {
  • 20? ? ? ? ? ? ? ? Name string
  • 21? ? ? ? ? ? ? ? Age int
  • 22? ? ? ? }{
  • 23? ? ? ? ? ? ? ? Name: "Codey",
  • 24? ? ? ? ? ? ? ? Age: 18, //這個逗號千萬不能忘記,若是和大括號同行,這個逗號才可以省略
  • 25? ? ? ? }
  • 26
  • 27? ? ? ? fmt.Println("student2數(shù)據(jù)類型:", reflect.TypeOf(student2))
  • 28? ? ? ? fmt.Println("student2的值:", reflect.ValueOf(student2))
  • 29? }
  • 第 9~12 行:聲明一個結(jié)構(gòu)體變量 student1,其屬性為 string 類型的 Name 和 int 類型的 Age。
  • 第 13 行:給結(jié)構(gòu)體變量的 Name 屬性賦值。
  • 第 14 行:給結(jié)構(gòu)體變量的 Age 屬性賦值。
  • 第 19~25 行:定義一個結(jié)構(gòu)體變量 student2,其屬性為 string 類型的 Name 和 int 類型的 Age,并賦初值。

執(zhí)行結(jié)果:

圖片描述

 

2. 使用自定義類型來模擬對象

使用自定義數(shù)據(jù)類型的方式來自定義一個結(jié)構(gòu)體類型,這樣就可以達到定義一個對象的相同效果。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? ? "fmt"
  • 5? ? ? ? ? ? "reflect"
  • 6? )
  • 7
  • 8? type Student struct {
  • 9? ? ? ? ? ? Name string
  • 10? ? ? ? ? Age int
  • 11? }
  • 12
  • 13? func main() {
  • 14? ? ? ? ? var student1 Student
  • 15? ? ? ? ? student1.Name = "Codey"
  • 16? ? ? ? ? student1.Age = 18
  • 17
  • 18? ? ? ? ? fmt.Println("student1數(shù)據(jù)類型:", reflect.TypeOf(student1))
  • 19? ? ? ? ? fmt.Println("student1的值:", reflect.ValueOf(student1))
  • 20? }
  • 第 8~11 行:自定義一個結(jié)構(gòu)體數(shù)據(jù)類型 Student。也可以解讀為,創(chuàng)建一個"Student類";
  • 第 14 行:聲明一個 Student 類型的變量 student1。也可以解讀為,創(chuàng)建一個"Student對象"。

執(zhí)行結(jié)果:

圖片描述

 

3. 使用函數(shù)來模擬面向?qū)ο蟮姆椒?/span>

Go 語言中的函數(shù)為自定義數(shù)據(jù)類型提供了一種特別的使用方式,形如func(變量名 自定義數(shù)據(jù)類型)函數(shù)名(...){...}。函數(shù)名前可以接收一個自定數(shù)據(jù)類型的參數(shù),參數(shù)傳遞的形式為自定義數(shù)據(jù)類型變量.函數(shù)名()的形式傳遞,這樣外表看起來就和面向?qū)ο缶幊桃恢铝恕?/p>

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? ? "fmt"
  • 5? )
  • 6
  • 7? type Student struct {
  • 8? ? ? ? ? ? Name string
  • 9? ? ? ? ? ? Age int
  • 10? }
  • 11
  • 12? func newStudent(name string, age int) Student {
  • 13? ? ? ? ? return Student{Name: name, Age: age}
  • 14? }
  • 15? func (s Student) PrintAge() {
  • 16? ? ? ? ? fmt.Println(s.Age)
  • 17? }
  • 18? func main() {
  • 19? ? ? ? ? student1 := newStudent("Codey", 18)
  • 20? ? ? ? ? student2 := newStudent("Tom", 19)
  • 21? ? ? ? ? fmt.Println("student1年齡:")
  • 22? ? ? ? ? student1.PrintAge()
  • 23? ? ? ? ? fmt.Println("student2年齡:")
  • 24? ? ? ? ? student2.PrintAge()
  • 25? }
  • 第 15~17 行:打印傳入的 Student 自定義類型參數(shù) Age 屬性。也可以解讀為創(chuàng)建一個打印學(xué)生"對象"年齡的"方法";
  • 第 22 行:使用自定義類型變量 student1 為參數(shù)調(diào)用 PrintAge。也可也解讀為 student1 "對象"調(diào)用PrintAge “方法”。

 

4. 小結(jié)

本文主要介紹了 Go 語言中另類的面向?qū)ο?。Go 語言中雖然沒有真正意義上的面向?qū)ο?,但是它可以通過結(jié)構(gòu)體+自定義數(shù)據(jù)類型的方式對面向?qū)ο筮M行模擬。所以可見 Go 語言是一個非常靈活的語言,它的走向和創(chuàng)造力完全取決于開發(fā)者的思維方式。

文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機構(gòu)!