说明
go的结构体没有构造函数,通常是用
工厂模式
来解决这个问题
-
使用工厂模式来解决跨包引的私有结构体的问题
目录结构
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())
}
网友评论