前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go编程基础-基础篇 16

Go编程基础-基础篇 16

原创
作者头像
未来最可爱的人
修改2021-03-24 10:28:24
2450
修改2021-03-24 10:28:24
举报
文章被收录于专栏:编程基础编程基础

Go 语言中的类型是可以直接内嵌到结构体中的,可以看作是一个没有属性名的属性。同时接口中也可以内嵌接口,并且只能内嵌接口。

结构体内嵌类型

结构体在定义属性字段的时候可以只写类型,不写属性名,但是一个类型只能写一个,不然结构体会无法识别你调用的时候使用的是哪个字段,这种只写类型不写属性名的属性被称为匿名字段。

代码语言:txt
复制
package main

import "fmt"

type Student struct {
	Name string
	Age  int
	int
}

func newStudent(name string, age int) Student {
	return Student{Name: name, Age: age, int: 10}
}

func main() {
	stu := newStudent("Codey", 18)
	fmt.Println("匿名字段的值:", stu.int)
}
代码语言:txt
复制
匿名字段的值: 10

结构体内嵌结构体

结构体内嵌结构体是用的最多的一种内嵌方式。它有点类似于面向对向语言中的继承,但是面向对象的设计原则中最好不要有多继承。Go 语言中的内嵌结构体更好理解为组合。

代码语言:txt
复制
package main

import "fmt"

type Callable struct{}

func (c Callable) Call() {
	fmt.Println("can call")
}

type Photographic struct{}

func (p Photographic) Photograph() {
	fmt.Println("can take photos")
}

type Mobile struct {
	Callable
	Photographic
}

type Pad struct {
	Photographic
}

func main() {
	var m Mobile
	fmt.Println("Moblie Function:")

	m.Call()
	m.Photograph()

	var p Pad
	fmt.Println("Pad Function:")
	p.Photograph()
}
代码语言:txt
复制
Moblie Function:
can call
can take photos
Pad Function:
can take photos

接口内嵌接口

使用这个功能来使同一个结构体,放在不同的接口中,而能使用的功能不同。常用的权限控制,对一个相同的数据结构,但是能操作的权限可以用接口分开。

代码语言:txt
复制
package main

import "fmt"

type Reader interface {
	Read()
}

type Writer interface {
	Write()
}

type OnlyReader interface {
	Reader
}

type ReaderAndWriter interface {
	Reader
	Writer
}

type file struct{}

func (f file) Read() {
	fmt.Println("Read something")
}

func (f file) Write() {
	fmt.Println("Write something")
}

func main() {
	f := file{}
	var rAndW ReaderAndWriter
	rAndW = f
	rAndW.Read()
	rAndW.Write()

	var onlyR OnlyReader
	onlyR = f
	onlyR.Read()
}
代码语言:txt
复制
Read something
Write something
Read something

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构体内嵌类型
  • 结构体内嵌结构体
  • 接口内嵌接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档