GO-结构体(类似python中的类)

前端之家收集整理的这篇文章主要介绍了GO-结构体(类似python中的类)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一.结构体有名属性

@H_403_2@package main import "fmt" func main(){ type Sb struct { name string //属性名,数据类型 age int //如果两个属性数据类型一样可以name,age int } //他有两个属性不一定要两个属性都进行赋值 //位置进行传参{"you",11} //但是位置传参必须所有属性都传进去 sb1 :=Sb{name:"you",age:11} //属性名:属性值 fmt.Println(sb1) //{you 11} fmt.Println(sb1.name) //you }

二.结构体匿名属性

@H_403_2@package main import "fmt" func main(){ type Sb struct { string //数据类型 int } sb1 :=Sb{string:"you"} fmt.Println(sb1) //{you 0} fmt.Println(sb1.string) //you }

三.结构体方法

@H_403_2@package main import "fmt" type Sb struct { } //注意点不定义在main函数内 func (sb Sb) Speak() { //func (结构体对象 结构体类型) 方法名(){} fmt.Println("嗯") } func main(){ wq :=Sb{} wq.Speak() }

四.结构体嵌套

@H_403_2@type Hobby struct { name string id int } type Person struct { name string Hobby //结构体名称 } func main(){ a := Person{name: "p1",Hobby:Hobby{name:"LOL",id:1}} fmt.Println(a.Hobby.name) //如果名字有重名需要.结构体.属性 fmt.Println(a.id)//如果没有重名属性名会提升 //fmt.Println(a.Hobby.id)你同样也可以这样获取 } /* 个人理解可以把它理解成python中的类的继承,比如A继承B type B struct {int} type A struct {B} 但是也有不同之处,他两个类中的名字一样可以共存,而python中不行 */

五.结构体为方法的参数且修改结构体的属性

@H_403_2@package main import "fmt" type Person struct { name string } func ChangeName(p *Person,NewName string){ //如果不是改变原来的类只传值可以穿结构体对象 (*p.name) = NewName //也可以写成p.name=NewName } func main(){ a := Person{name: "p1"} ChangeName(&a,"ywy") fmt.Println(a.name) }

六.结构体为方法的参数不修改结构体的属性

@H_403_2@package main import "fmt" type Person struct { name string } func ChangeName(p Person,NewName string){ p.name = NewName } func main(){ a := Person{name: "p1"} ChangeName(a,"ywy") fmt.Println(a.name) }

七.结构体类型断言

写法一:

@H_403_2@package main import "fmt" type Person struct { name string } func Test(a interface{}){ _,err :=a.(*Person) if !err{ fmt.Println("是Person") } } func main(){ a := Person{name: "p1"} Test(a) }

写法二:

@H_403_2@package main import ( "fmt" ) type Person struct { name string } func Test(a interface{}) { switch a.(type) { //如果要获取a的对象就AStruct :=a.(type) case Person: fmt.Println("是Person") default: fmt.Println("不是Person") } } func main() { a := Person{name: "p1"} Test(a) }

猜你在找的Go相关文章