1. 程式人生 > 其它 >golang中的結構體工廠

golang中的結構體工廠

1. main包

package main

import (
	"day01/utils"
	"fmt"
)

//type File struct {
//	fd int
//	name string
//}
//func NewFile(fd int, name string) *File {
//	// 定義一個File型別的工廠方法
//	return &File{fd: fd, name: name}
//}

func main() {
	// 結構體工廠,
	// go語言不支援面向物件程式語言的構造方法,為了方便通常會為型別定義一個工廠
	// 按慣例,工廠的名字以new或New開頭,假設定義如下的file結構體型別
	//file := NewFile(10, "./test.txt")
	//fmt.Println(file.fd, file.name)
	// go語言裡通常向上面這樣在工廠方法裡使用初始化來簡便的實現建構函式

	// 強制使用工廠方法,讓結構體變為私有,工廠方法變為公有,這樣強制所有程式碼在例項化結構體時都使用工廠方法

	file := utils.NewFile(10, "./test.txt")
	fmt.Println(file.Fd, file.Name)

}

  

2. utils包

package utils

// 私有
type file struct {
	Fd int
	Name string
}
// 公有
func NewFile(fd int, name string) *file {
	return &file{Fd: fd, Name: name}
}