Go__工场模式:
- 公有结构体的调用
package mode
//定义一个结构体
type Student struct {
Name string
Score float64
}
package main
import (
"fmt"
"go_code/结构体/factory/mode"
)
func main() {
var stu = mode.Student{
Name: "tom",
Score: 90.5,
}
fmt.Println(stu)
- 当结构体改为私有,则其他文件将不能调用,此时可用工场模式:
package mode
type student struct { //因为student结构体首字母是小写,因此只能在model使用
Name string
Age int32
}
在mode包文件下:
通过工厂模式来解决
func Newstudent(n string, a int32) student {
return student{
Name: n,
Age: a,
}
}
package main
import (
"fmt"
"go_code/结构体/factory/mode"
)
var stu2 = mode.Newstudent("stom", 21)
fmt.Println(stu2)
fmt.Println(stu2.Name, stu2.Age)
- 当结构体为私有,结构体属性也为私有时:
main函数的 fmt.Println(stu2.name, stu2.age) 将不能使用
package mode
type student struct {
name string
age int32
}
func Student(n string, a int32) *student {//设为指针类型命名,也可不设
return &student{
name: n,
age: a,
}
}
func (m student) Getname() string {
return m.name
}
func (m student) Getage() int32 {
return m.age
}
package main
import (
"fmt"
"go_code/结构体/factory/mode"
)
var mon = mode.Student("孙悟空", 500)
fmt.Println(*mon)
fmt.Println("mon's name : ", (*mon).Getname(), "\tmon's age : ", (*mon).Getage())
此时的Getname()与Getage()不需要包名.调用,因为是结构体student的方法,实例化的mon即可调用