Go語言程式:從另一個建構函式呼叫建構函式
在 Go 程式語言中,建構函式是一種特殊的函式,用於在物件最初建立時初始化物件的狀態。它用於初始化變數併為物件提供資料。我們將使用兩種方法執行此程式,並且在兩個示例中都將使用結構體,在第二個示例中將使用匿名結構體。讓我們透過這些示例來了解程式是如何執行的。
方法 1:使用返回所需型別的函式
在這種方法中,要構造一個新的 Child 結構體,NewChildWithAge 函式執行 NewChild 函式,設定年齡,並返回完成的結構體。
演算法
步驟 1 − 建立一個名為 main 的包,並在程式中宣告 fmt(格式化包),其中 main 生成可執行程式碼,而 fmt 幫助格式化輸入和輸出。
步驟 2 − 使用 Name 和 Age 屬性構造一個 Child 結構體。
步驟 3 − 建立一個名為 NewChild 的函式,該函式接受一個名稱字串作為輸入並返回指向名為 Child 的結構體的指標。此函式將 Child 結構體的 Name 欄位初始化為輸入名稱,而 Age 欄位初始化為 0。
步驟 4 − 建立一個名為 NewChildWithAge 的函式,該函式接受一個名稱字串和一個年齡整數作為輸入並返回指向名為 Child 的結構體的指標。
步驟 5 − 在 NewChildWithAge 函式中呼叫 NewChild 函式以建立一個新的 Child 結構體。
步驟 6 − 將年齡輸入設定為 NewChild 返回的 Child 結構體的 Age 欄位。
步驟 7 − 返回 Child 結構體並呼叫 main 函式中的 NewChildWithAge 函式,傳遞引數“Virat”和 10 作為輸入。
步驟 8 − 在名為 c 的變數中儲存生成的 Child 結構體。
步驟 9 − 使用 fmt.Println() 函式列印 Child 結構體的 Name 和 Age 欄位,其中 ln 表示換行。
示例
在此示例中,我們將使用返回所需型別的函式。讓我們看一下程式碼。
package main
import "fmt"
type Child struct {
Name string
Age int
}
func NewChild(name string) *Child {
return &Child{
Name: name,
Age: 0,
}
}
func NewChildWithAge(name string, age int) *Child {
c := NewChild(name) //call this function to create a new child struct
c.Age = age
return c //return the child attributes
}
func main() {
c := NewChildWithAge("Virat", 10)
fmt.Println("Here, calling one constructor from another can be represented as:")
fmt.Println(c.Name, c.Age) //print he name and age of child
}
輸出
Here, calling one constructor from another can be represented as: Virat 10
方法 2:使用匿名結構體欄位
此方法具有 Child 型別的匿名欄位,允許它繼承 Child 的所有屬性。透過使用 NewChild 函式初始化 Child 欄位並將 Age 欄位設定為提供的年齡,NewChildWithAge 方法構造一個新的 ChildWithAge 結構體。
演算法
步驟 1 − 建立一個名為 main 的包,並在程式中宣告 fmt(格式化包),其中 main 生成可執行程式碼,而 fmt 幫助格式化輸入和輸出。
步驟 2 − 只使用 Name 欄位建立 Child 結構體。
步驟 3 − 建立一個名為 ChildWithAge 的結構體,它有兩個欄位:一個 Age 欄位和一個匿名的 Person 欄位。
步驟 4 − 建立一個名為 NewChild 的函式,該函式接受一個名稱字串作為輸入並返回指向名為 Child 的結構體的指標。此函式使用提供的名稱初始化 Child 結構體的 Name 欄位。
步驟 5 − 建立一個名為 NewChildWithAge 的函式,該函式接受一個名稱字串和一個年齡整數作為輸入並返回指向名為 ChildWithAge 的結構體的指標。
步驟 6 − 在 NewChildWithAge 函式中初始化一個新的 ChildWithAge 結構體。
步驟 7 − 使用 NewChild 函式初始化 ChildWithAge 結構體的匿名 Person 欄位。
步驟 8 − 在 ChildWithAge 結構體的 Age 欄位中設定輸入年齡。
步驟 9 − 將 ChildWithAge 結構體返回到函式,並在 main 函式中呼叫 NewChildWithAge 函式,傳遞引數“Virat”和 10 作為輸入。
步驟 10 − 在名為 c 的變數中儲存生成的 ChildWithAge 結構體。
步驟 11 − 列印 ChildWithAge 結構體的 Name 和 Age 屬性。
示例
在此示例中,我們將使用匿名結構體欄位從另一個建構函式呼叫建構函式。讓我們看一下程式碼。
package main
import "fmt"
type Child struct {
Name string
Age int
}
type ChildWithAge struct {
Child
Age int
}
func NewChild(name string) *Child {
return &Child{
Name: name,
}
}
func NewChildWithAge(name string, age int) *ChildWithAge {
return &ChildWithAge{
Child: *NewChild(name), //call the function to create a child struct
Age: age,
}
}
func main() {
c := NewChildWithAge("Virat", 10) //set the values and store the output in c
fmt.Println("Here, calling one constructor from another can be represented as:")
fmt.Println(c.Name, c.Age) //print the name and age of child
}
輸出
Here, calling one constructor from another can be represented as: Virat 10
結論
我們使用兩種方法透過從另一個建構函式呼叫建構函式來執行程式。在第一種方法中,我們使用了返回所需型別的函式,在第二種方法中,我們使用了匿名結構體來執行程式。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP