• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一.结构体有名属性

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
}

二.结构体匿名属性

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
}

三.结构体方法

package main
import "fmt"

type Sb struct {
}

//注意点不定义在main函数内
func (sb Sb) Speak() {   //func (结构体对象 结构体类型) 方法名(){}
	fmt.Println("嗯")
}


func main(){
	wq :=Sb{}
	wq.Speak()
}

四.结构体嵌套

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中不行
*/

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

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)
}

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

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)
}

七.结构体类型断言

写法一:

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)
}

写法二:

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)
}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
合并两个有序的链表Python和Go代码发布时间:2022-07-10
下一篇:
Go语言运算符发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap