Day8

今天学方法和接口,感觉相对来说有些难的,毕竟没基础

package main

import(
	"fmt"
	_ "fmt"
)


func main(){
	fmt.Println("冬至快乐!")
	//一、结构体:
	//Go 语言中没有“类”的概念,也不支持像继承这种面向对象的概念。
	//但是Go 语言的结构体与“类”都是复合结构体,而且Go 语言中结构体的组合方式
	//比面向对象具有更高的扩展性和灵活性。

	//1、定义:
	//结构体中字段的类型可以是任何类型,包括函数类型,接口类型,
	//甚至结构体类型本身。例如我们声明一个链表中的节点的结构体类型。
	type Student struct{
		Name string
		Age int
	}
	type ListNode struct{
		Val int
		Next *ListNode
	}
	type Person struct{
		ID string
		int	//不给指定字段名字,匿名字段
	}

	//2、操作结构体
	//三种创建结构体实例的方法:
	//使用new函数会创建一个指向结构体类型的指针,创建过程中会
	// 自动为结构体分配内存,结构体中每个变量被赋予对应的零值。
	s1 := new(Student)
	//此时给结构体赋值的顺序需要与结构体字段声明的顺序一致。
	s2 := Student{"james",  35}
	//创建结构体的同时显示的为结构体中每个字段进行赋值。
	s3 := &Student{
		Name: "LeVB",
		Age: 36,
	}
	fmt.Println(s1,s2,s3)
	s1.Name = "Aten"
	s1.Age = 35
	fmt.Println(s1)
	//匿名字段的操作
	p := Person{"tang", 100}
	fmt.Println(p)

	//3、内嵌结构体
	type A struct{
		X, Y int
	}
	type B struct{
		A	//内嵌,注意与声明一个结构体类型区分
		X int
		Name string
	}
	b := new(B)
	b.X = 10
	b.Y = 20
	b.Name = "james"
	fmt.Println(b)

	//二、方法
	//1、方法定义,方法与函数类似,只不过在方法定义时会在func和方法名之间增加一个参数,如下所示:
	//func (r Receiver)func_name(){	//r被称为方法的接收者
		//body
	//}
	p2 := Person2{
		name:"james",
	}
	//调用GetName方法,值接收
	fmt.Println(p2.GetName())

	//2、方法接收者
	//指针接收者
	p3 := Person2{
		name:"jamessss",
	}
	p3.SetName("Bing")
	fmt.Println(p3.GetName())

	//三、接口(接口相当于一种规范,它需要做的是谁想要实现我这个接口要做哪些内容,而不是怎么做。)
	//1、接口定义
	//type Namer interface {
	//	Method1(param_list) return_type
	//}

	//2、实现接口(在go语言中不需要显示的去实现接口,只要一个类型实现了该接口中定义
	//的所有方法就是默认实现了该接口,而且允许多个类型都实现该接口,也允许一个类型实现多个接口。)
	bi := Bird{"Bird"}
	d := Dog{"Dog"}
	EatWhat(bi)
	EatWhat(d)

}

//方法
type Person2 struct{
	name string
}
func (p Person2) GetName()string{
	return p.name
} //其中GetName方法的接收者为p是Person2结构体类型,也就是说我们为结构体Person2
// 绑定了一个GetName方法

//指针接收者
func(p *Person2)SetName(name string){
	p.name = name
}

//实现接口
type Animal interface {
	Eat()
}

type Bird struct {
	Name string
}

func (b Bird) Eat() {
	fmt.Println(b.Name + "吃虫")
}

type Dog struct {
	Name string
}

func (d Dog) Eat() {
	fmt.Println(d.Name + "吃肉")
}

func EatWhat(a Animal) {
	a.Eat()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值