【GO】结构体组合练习题

用户信息结构体组合

题目描述

定义结构体 User,包含字段:

  • Username string
  • Age int

定义结构体 Student组合 User,并新增字段:

  • StudentID string

创建 Student 变量,赋值并打印所有字段。

输出示例

姓名: 张三

年龄: 20

学号: 2025001

实现代码

Go 复制代码
package main

import "fmt"

// 基础结构体
type User struct {
	Username string
	Age      int
}

// 结构体组合:Student 组合 User
type Student struct {
	User      // 匿名组合(结构体嵌套)
	StudentID string
}

func main() {
	// 创建组合结构体变量
	stu := Student{
		User: User{
			Username: "张三",
			Age:      20,
		},
		StudentID: "2025001",
	}

	// 直接访问组合后的字段
	fmt.Println("姓名:", stu.Username)
	fmt.Println("年龄:", stu.Age)
	fmt.Println("学号:", stu.StudentID)
}

多层结构体嵌套组合

题目描述

定义 Address:Province, City

定义 User:Name, Age

定义 Student 组合 User 和 Address,新增 StudentID

赋值并打印全部信息。

输出示例

姓名: 李四

年龄: 21

省份: 广东

城市: 深圳

学号: 2025002

实现代码

Go 复制代码
package main

import "fmt"

type Address struct {
	Province string
	City     string
}

type User struct {
	Name string
	Age  int
}

type Student struct {
	User
	Address
	StudentID string
}

func main() {
	stu := Student{
		User: User{
			Name: "李四",
			Age:  21,
		},
		Address: Address{
			Province: "广东",
			City:     "深圳",
		},
		StudentID: "2025002",
	}

	fmt.Println("姓名:", stu.Name)
	fmt.Println("年龄:", stu.Age)
	fmt.Println("省份:", stu.Province)
	fmt.Println("城市:", stu.City)
	fmt.Println("学号:", stu.StudentID)
}

结构体组合与方法继承

题目描述

定义 Person 结构体:Name string

Person 添加方法 Say() string,返回 "我是:xxx"

定义 Teacher 组合 Person,新增 Course string

创建对象并调用方法与字段。

输出示例

我是:王老师

授课课程: Go语言

实现代码

Go 复制代码
package main

import "fmt"

type Person struct {
	Name string
}

func (p Person) Say() string {
	return "我是:" + p.Name
}

type Teacher struct {
	Person
	Course string
}

func main() {
	teacher := Teacher{
		Person: Person{
			Name: "王老师",
		},
		Course: "Go语言",
	}

	fmt.Println(teacher.Say())
	fmt.Println("授课课程:", teacher.Course)
}

结构体组合实现多种动物

题目描述

定义 Animal 结构体,包含 Name、Type (类型:猫、狗、鸟)字段

为 Animal 添加三个方法

  • Eat() string:返回 "xxx 正在吃食物"
  • Sleep() string:返回 "xxx 正在睡觉"
  • Speak() string:返回 "xxx 发出未知声音"

定义 Cat、Dog、Bird 分别组合 Animal

重写各动物的 Speak():猫"喵喵叫"、狗"汪汪叫"、鸟"叽叽喳喳叫"

main 中创建三种动物,调用所有方法并打印。

输出示例

小白 正在吃食物

小白 正在睡觉

小白 喵喵叫

大黄 正在吃食物

大黄 正在睡觉

大黄 汪汪叫

小翠 正在吃食物

小翠 正在睡觉

小翠 叽叽喳喳叫

实现代码

Go 复制代码
package main

import "fmt"

type Animal struct {
	Name string
	Type string
}

func (a Animal) Eat() string {
	return fmt.Sprintf("%s 正在吃食物", a.Name)
}

func (a Animal) Sleep() string {
	return fmt.Sprintf("%s 正在睡觉", a.Name)
}

func (a Animal) Speak() string {
	return fmt.Sprintf("%s 发出未知声音", a.Name)
}

type Cat struct {
	Animal
}

func (c Cat) Speak() string {
	return fmt.Sprintf("%s 喵喵叫", c.Name)
}

type Dog struct {
	Animal
}

func (d Dog) Speak() string {
	return fmt.Sprintf("%s 汪汪叫", d.Name)
}

type Bird struct {
	Animal
}

func (b Bird) Speak() string {
	return fmt.Sprintf("%s 叽叽喳喳叫", b.Name)
}

func main() {
	cat := Cat{Animal{Name: "小白", Type: "猫"}}
	dog := Dog{Animal{Name: "大黄", Type: "狗"}}
	bird := Bird{Animal{Name: "小翠", Type: "鸟"}}

	fmt.Println(cat.Eat())
	fmt.Println(cat.Sleep())
	fmt.Println(cat.Speak())
	fmt.Println()

	fmt.Println(dog.Eat())
	fmt.Println(dog.Sleep())
	fmt.Println(dog.Speak())
	fmt.Println()

	fmt.Println(bird.Eat())
	fmt.Println(bird.Sleep())
	fmt.Println(bird.Speak())
	fmt.Println()

}
相关推荐
名字还没想好☜14 分钟前
Go for-range 循环变量陷阱:goroutine 里全打印同一个值(Go 1.22 前后差异)
开发语言·后端·golang·go
会编程的土豆1 小时前
功能详解 01 · 用户注册:从表单到数据库一行
开发语言·数据库·后端·mysql·golang
go不是csgo2 小时前
从模板到五道 LeetCode:完全背包的 Golang 教学笔记
笔记·leetcode·golang
Wang's Blog2 小时前
Go-Zero项目开发33: IM实时通信前后端对接与微服务基础设施实践
开发语言·微服务·golang·go-zero
Wang's Blog13 小时前
Go-Zero 项目开发22:用户群聊功能的实现与完善
开发语言·golang
Wang's Blog15 小时前
Go-Zero项目开发24: 基于Bitmap实现群聊消息已读未读
开发语言·后端·golang
布朗克16820 小时前
Go 入门到精通-33-unsafe 与 CGO
开发语言·后端·golang·unsafe·cgo
ttwuai21 小时前
AI 生成后台删除按钮后,MySQL 软删除和唯一索引怎么验
数据库·mysql·golang
Wang's Blog1 天前
Go-Zero 项目开发19:基于 Kafka 的异步消息存储与转发实战
golang·kafka
小莫分享1 天前
sshw:用交互搜索和 Web 配置高效管理 SSH Server
linux·运维·golang·开源·ssh