package main
import "fmt"
type person struct {
name string
age int
}
type dog struct {
name string
}
//构造函数:约定成俗用new开头
//返回的是结构体还是结构体指针
//当结构体比较大的时候尽量使用结构体指针,减少程序的运行内存开销
func newPerson(name string, age int) person {
return person{
name: name,
age: age,
}
}
func newDog(name string) dog {
return dog{
name: name,
}
}
func main() {
p1 := newPerson("嘟嘟", 3)
p2 := newPerson("一一", 3)
fmt.Println(p1, p2)
d1 := newDog("沙拉")
fmt.Println(d1)
}
构造函数方法和接收者
package main
import "fmt"
//标识符:变量名、函数名、类型名、方法名
//go语言中如果标识符首字母是大写的,就表示对外部可见(暴露的,共有的)
//dog 这是一个狗的结构体
type dog struct {
name string
}
type person struct {
name string
age int
}
//构造函数
func newDog(name string) dog {
return dog{
name: name,
}
}
func newPerson(name string, age int) person {
return person{
name: name,
age: age,
}
}
//方法是作用域特定类型的函数
//接受者表示的是调用该方法的具体类型变量,多用类型名首字母小写表示
func (d dog) wang() {
fmt.Printf("%s:汪汪汪", d.name)
}
//使用值接收者:传拷贝进去
func (p person) guonian() {
p.age++
}
//指针接收者:传内存地址进去
func (p *person) zhenguonian() {
p.age++
}
func (p *person) dream() {
fmt.Println("peace")
}
func main() {
d1 := newDog("沙拉")
d1.wang()
p1 := newPerson("贝贝", 7)
fmt.Println(p1.age)
p1.guonian()
fmt.Println(p1.age)
p1.zhenguonian()
fmt.Println(p1.age)
p1.dream()
}