package model
type student struct {
Name string
score float64
}
//因为student结构体首字母是小写,因此之恩那个在model来使用
//通过工厂模式来解决这个问题
//1.在model里面增加一个方法来返回student类型的地址
func NewStudent(n string, a float64) *student {
return &student{
Name: n,
score: a, //可以调用这个公共方法来返回student的指针
}
}
//Getscore的G是大写的所以Getscore是一个公共的函数可以在main中调用,只要传入一个student的地址就可以返回值。
//Getscore是值拷贝还是地址拷贝和谁调用它没有关系,因为在声明的时候就已经写了s *student,所以是地址拷贝。
func (s *student) Getscore() float64 {
return s.score
}
如果想把在model下写的私有结构体的私有变量让main所获取,首先需要一个公共的函数NewStudent来使得main函数可以创建model中的结构体,NewStudent的原理是可以返回这个结构体的地址,接着利用这个结构体的地址可以调用公共方法Getscore,因为Getscore在声明 的时候就已经写好是地址传递的方法了,所以将结构体的地址传进去可以得到私有的返回值来获得私有变量。
package main
import (
"fmt"
"go_code/model"
)
func main() {
var stu = model.NewStudent("tom", 88.8)
fmt.Println(stu)
fmt.Println(*stu)
fmt.Println(stu.Name)
fmt.Println("用Get方法得到的")
a := stu.Getscore()
fmt.Println(a)
}