说明:
golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题
如果包里面的结构体变量首字母小写,引入后,不能直接使用,可以工厂模式解决:
ch1.go
package ch1 type student struct { Name string Score float64 } func NewStudent(n string, s float64) *student { return &student{ Name: n, Score: s, } }
main.go
package main import ( "fmt" "work/ch1" ) func main() { var stu = ch1.NewStudent("tom", 88.88) fmt.Println(*stu) fmt.Println("name=",stu.Name, "score=",stu.Score) }
如何student结构体中的Score变成首字母小写的score,那么可以定义一个方法,用于获取score的值:
ch1.go
package ch1 type student struct { Name string score float64 } func NewStudent(n string, s float64) *student { return &student{ Name: n, score: s, } } func (s *student) GetScore() float64 { return s.score }
main.go
package main import ( "fmt" "work/ch1" ) func main() { var stu = ch1.NewStudent("tom", 888.88) fmt.Println(*stu) fmt.Println("name=",stu.Name, "score=",stu.GetScore()) }