go的工厂模式

说明

go的结构体没有构造函数,通常是用工厂模式来解决这个问题

go的工厂模式_第1张图片
  • 使用工厂模式来解决跨包引的私有结构体的问题
    目录结构


    go的工厂模式_第2张图片

modal.go

package model

type students struct {
    Name   string
    scores float64
}

//student结构体是小写的,因些只能在Model使用
func NewStudent(n string, s float64) *students {
    return &students{
        Name:   n,
        scores: s,
    }
}

//如果score字段首字母小写,则,在其它包不可以直接使用,我们可以提供一个方法
func (s *students) GetScores() float64 {
    return s.scores
}

main.go

package main

import (
    "fmt"
    "go_demo/factory/model"
    )
func main(){
    //通过工厂模式来解决
    var stu1 =model.NewStudent("tome~",98.7)
    fmt.Println(*stu1)
    //由于go编译器会对指针变量取值自动处理,(*stu1).Name 等价 stu1.Name
    fmt.Println("name=",(*stu1).Name)
    fmt.Println("score=",stu1.GetScores())
}

你可能感兴趣的:(go的工厂模式)