golang 结构体的嵌入类型和接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 结构体的嵌入类型和接口相关的知识,希望对你有一定的参考价值。

结构体的嵌入类型


1、嵌入结构体1

package main

import "fmt"

type Person struct {
	name string
}

type Student struct {
	class int
	person Person         //定义person 类型为Person
}


func main(){
	s := Student{1,Person{"xiaoming"}}
	fmt.Println("name :",s.person.name)  //访问嵌入结构体的变量

}
//执行结果:
name : xiaoming

2、嵌入结构体2

package main

import "fmt"

type Person struct {
	name string
}

type Student struct {
	class int
	Person          //我们直接将Person引入到Student
}


func main(){
	s := Student{1,Person{"xiaoming"}}
	fmt.Println("name :",s.name)  //访问时可以直接访问s.name 而不需要s.person.name

}
//执行结果:
name: xiaoming

接口


1、定义接口

在go语言中,接口是定义了类型一系列方法的列表,如果一个类型实现了该接口所有的方法,那么该类型就符合该接口

package main

import "fmt"
import "math"


type Shape interface {
	area() float64

}

type Rectangle struct {
	width float64
	height float64
}

type Circle struct {
	radius float64
}

func (r Rectangle) area() float64 {
	return r.height * r.width
}

func (c Circle) area() float64 {
	return math.Pi * math.Pow(c.radius,2)
}

func getArea(shape Shape) float64 {
	return shape.area()
}

func main(){
	r := Rectangle{20,10}
	c := Circle{4}
	fmt.Println("Rectangle Area =",getArea(r))
	fmt.Println("Circle Area =",getArea(c))

}
//执行结果:
Rectangle Area = 200
Circle Area = 50.26548245743669

2、接口嵌入

package main

import "fmt"
import "math"


type Shape interface {
	area() float64

}

type MultiShape interface {
	Shape            //嵌入式
}

type Rectangle struct {
	width float64
	height float64
}

type Circle struct {
	radius float64
}

func (r Rectangle) area() float64 {
	return r.height * r.width
}

func (c Circle) area() float64 {
	return math.Pi * math.Pow(c.radius,2)
}

func getArea(shape MultiShape) float64 {        //改为MultiShape
	return shape.area()
}

func main(){
	r := Rectangle{20,10}
	c := Circle{4}
	fmt.Println("Rectangle Area =",getArea(r))
	fmt.Println("Circle Area =",getArea(c))

}
//执行结果:
Rectangle Area = 200
Circle Area = 50.26548245743669        //执行结果一致



本文出自 “欺壹世De博客” 博客,请务必保留此出处http://qiyishi.blog.51cto.com/5731577/1903029

以上是关于golang 结构体的嵌入类型和接口的主要内容,如果未能解决你的问题,请参考以下文章

Golang基础之结构体

Golang 入门 : 结构体(struct)

golang学习笔记4——结构体

golang之结构体和方法

golang中级进阶(二):结构体

Golang + MongoDB 嵌入类型(将一个结构嵌入到另一个结构中)