golang 工厂模式

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

使用场景,当使用结构体时,结构体名称首字母是小写时,外部就无法引用

此时就可以用工厂模式来解决

案例:

在model包里定义一个结构体首字母大写

package model

//定义一个结构体
type Student struct{
	Name string
	Scoute float64
}

在main包里引用

package main
import(
	"fmt"
	"go_code/project01/object/demo7/model"
)

func main(){
  stu := model.Student{
	  Name :"tom",
	  Scoute : 36.5,
  }
  fmt.Println(stu)//结果{tom 36.5}
}

但当model包里的结构体首字母改为小写时,main包就无法引用了

解决方式:

package model

//定义一个结构体
type student struct{
	Name string
	Scoute float64
}
//*student返回结构体的指针
func GetStudent(n string,s float64) *student {
	//外包引用不了,但本包是可以引用的
	stu := student{
		Name : n,
		Scoute : s,
	}
	return &stu
}
package main
import(
	"fmt"
	"go_code/project01/object/demo7/model"
)

func main(){
  stu := model.GetStudent("tom",88.8)
  fmt.Println(stu)  //结果&{tom 88.8}
  fmt.Println(*stu) //结果{tom 88.8}
  fmt.Println("name = ",stu.Name," stoute = ",stu.Scoute) //结果name =  tom  stoute =  88.8
}

案例:

如果结构体里面的字段也是首字母小写 解决方式

package model

//定义一个结构体
type student struct{
	Name string
	scoute float64
}
//*student返回结构体的指针
func GetStudent(n string,s float64) *student {
	//外包引用不了,但本包是可以引用的
	stu := student{
		Name : n,
		scoute : s,
	}
	return &stu
}
//结构体中的scoute字段也是小写所以需要写一个方法返回
func (s *student) GetScoute() float64{
	return s.scoute
}
package main
import(
	"fmt"
	"go_code/project01/object/demo7/model"
)

func main(){
  stu := model.GetStudent("tom",99.8)
  fmt.Println("name = ",stu.Name," stoute = ",stu.GetScoute()) //结果name =  tom  stoute =  99.8
}


版权声明:本文为qq_39657769原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。