golang工厂模式

一、说明

当结构体名的首字母为小写时,这时这个结构体只能在本包使用,而不能被其他包使用,但是我们在别的包中又希望可以使用这个结构体。由于go语言中没有构造函数,我们可以使用工厂模式来解决这个问题。

二、举例

需求:model包中student结构体首字母为小写,main包中需使用student结构体。解决方法如下:
项目结构图:
image

student.go

package model

type student struct {
	Name  string
	Score float32
}

func NewStudent(name string, score float32) *student {
	return &student{
		Name:  name,
		Score: score,
	}
}

main.go

package main

import (
	"fmt"
	"model"
)

func main() {
	student := model.NewStudent("小明", 90.5)
	fmt.Println("student=", *student)
}

输出结果:

student= {小明 90.5}

当student结构体中Score字段首字母修改为小写score时,如何在main包中重新给Score字段赋值,解决方法如下:

student.go

package model

type student struct {
	Name  string
	score float32
}

func NewStudent(name string, score float32) *student {
	return &student{
		Name:  name,
		score: score,
	}
}

func (stu *student) GetScore() float32 {
	return stu.score
}

func (stu *student) SetScore(s float32) {
	stu.score = s
}


main.go

package main

import (
	"fmt"
	"model"
)

func main() {
	student := model.NewStudent("小明", 90.5)
	fmt.Println("student=", *student)
	student.SetScore(100)
	fmt.Println("student.Name=", student.Name, "student.score=", student.GetScore())
}

输出结果:

student= {小明 90.5}
student.Name= 小明 student.score= 100
posted @ 2021-05-27 21:29  若雨蚂蚱  阅读(168)  评论(0编辑  收藏  举报