结构体
1.结构体的定义,和结构体变量的定义
package main
import "fmt"
type student struct {
Name string
Age int
School string
}
func main() {
var lv student
fmt.Println(lv)
lv.Name="akujbfc"
lv.Age=18
lv.School="XUPT"
}
2.结构体实例的创建
(1)方式一:
如上
(2)方式二:
type student struct {
Name string
Age int
School string
}
func main() {
var l student = student{"lv", 18, "XUPT"}
fmt.Println(l)
}
(3)方法三
package main
import "fmt"
type student struct {
Name string
Age int
School string
}
func main() {
var l *student = new(student)
(*l).Name = "lv"
(*l).School = "XUPT"
l.Age = 18
fmt.Println(l)
}
这里使用(*l)与l效果相同,是因为编译器的自动修正
(4)方式四
func main() {
var l *student = &student{}
(*l).Name = "lv"
(*l).School = "XUPT"
l.Age = 18
fmt.Println(l)
}
也可以直接在{}内赋值
结构体直接的转换
1.结构体是用户单独定义的类型,和其他类型进行转换的时候需要有完全相同的字段(名字,个数,类型)
type student struct {
Age int
}
type teacher struct {
Age int
}
func main() {
var a student = student{1}
var b teacher = teacher{10}
a = student(b)
fmt.Println(a)
}
2.结构体进行type重新定义(相当于别名),golang认为是新的数据类型,但是可以强制转换
type student struct {
Age int
}
type Stu student
func main() {
var a student
var b Stu
a = student(b)
fmt.Println(a)
}
方法
方法是作用在指定的数据类型之上,和指定的数据类型绑定
方法的定义格式
type A struct{
Num int
}
func(a A)test(){
fmt.println(a.num)
}
func(a A)test()
1)A结构体有个对应的方法叫做test
2)(a A)体现test方法与结构体A为绑定关系
package main
import "fmt"
// 定义结构体
type Person struct {
Name string
}
// 给结构体绑定方法
func (p Person) test() { // 参数名字任意
fmt.Println(p.Name)
}
func main() {
// 创建结构体对象
var p Person
p.Name = "lv"
p.test()
}
注意:
1)test方法中参数名字任意
2)结构体person和test方法是绑定的,调用test方法必须使用绑定的类型:person
3)使用其他方法调用test方法一定会报错
4)结构体对象传入test方法中属值传递
package main
import "fmt"
// 定义结构体
type Person struct {
Name string
}
// 给结构体绑定方法
func (p *Person) test() { // 参数名字任意
(*p).Name = "li"
fmt.Println(p.Name)
}
func main() {
// 创建结构体对象
var p Person
p.Name = "lv"
(&p).test()
}