Golang面向对象
package main
import "fmt"
// 定义老师结构体,将各个属性放入结构体进行管理
type Teacher struct {
//变量名字大写外界可以访问这个属性
Name string
Age int
School string
}
func main() {
//创建老师结构体的实例、对象、变量
var t *Teacher = &Teacher{"shanshan", 23, "tsinghua"}
fmt.Println(*t)
}
//方式一
////创建老师结构体的实例、对象、变量
//var zhao Teacher
//fmt.Println(zhao) //{ 0 }
//zhao.Name = "shanshan"
//zhao.Age = 23
//zhao.School = "qinghua"
//fmt.Println(zhao) //{shanshan 23 qinghua}
//方式二
////创建老师结构体的实例、对象、变量
//var t Teacher = Teacher{"shanshan", 22, "tsinghua"}
//fmt.Println(t)
////t.Name = "shanshan"
////t.Age = 22
////t.School = "tsinghua"
////fmt.Println(t)
//方式三
////创建老师结构体的实例、对象、变量
//var t *Teacher = new(Teacher)
////t是指针,t实际指向的就是地址,应该给这个地址指向的对象的字段赋值
//(*t).Name = "shanshan"
//(*t).Age = 23 // (*)的作用:根据地址取值
////为了符合程序员的编程习惯,go提供了简便的赋值方式
//t.School = "清华大学" //go底层对t.School进行了转化,转为(*t).School = "清华大学"
//fmt.Println(*t)
相互间的转换
package main
import "fmt"
type Student struct {
Age int
}
type Person struct {
Age int
}
func main() {
var s Student = Student{21}
var p Person = Person{30}
s = Student(p)
fmt.Println(s)
fmt.Println(p)
}
package main
import "fmt"
type Students struct {
Age int
}
type stus Students
func main() {
var sts Students = Students{60}
var st stus = stus{12}
sts = Students(st)
fmt.Println(sts)
fmt.Println(st)
}
方法的引入
package main
import "fmt"
// 定义结构体
type Person struct {
Name string
}
// 绑定方法
func (p Person) test() {
p.Name = "shit"
fmt.Println(p.Name)
}
func main() {
//创建结构体对象
var p Person
p.Name = "fuck"
p.test()
fmt.Println(p.Name)
}
如程序员希望在方法中,改变结构体变量的值,可以通过结构体指针的方式来处理
Golang中的方法作用在指定的数据类型上的,和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct,比如intfloat32等都锕以有方法
字符串类型