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}
}

  

posted @ 2021-10-16 15:10  专职  阅读(46)  评论(0编辑  收藏  举报