【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()

}
相关推荐
圣殿骑士-Khtangc6 小时前
Go-Mutex源码解析从自旋到饥饿模式的完整演进
golang
圣殿骑士-Khtangc16 小时前
Go大厂面试真题精讲之并发安全Map的实现方案
golang
运维开发笔记16 小时前
3.8 Go switch 语句学习笔记
golang
圣殿骑士-Khtangc18 小时前
Go-Channel面试精讲从底层结构到select随机性
golang
北漂燕郊杨哥18 小时前
dsh-desktop:DeepSeek Harness 的本地优先桌面应用
golang·wails·deepseek·deepseekharness
朋克洛德的码农1 天前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
圣殿骑士-Khtangc1 天前
Go泛型编程实战从类型约束到泛型数据结构
golang
FfHUCisI1 天前
Golang - 信号量模式(Semaphore Pattern)
开发语言·后端·golang
报错小能手2 天前
Go 语言结构 基础语法
开发语言·后端·golang
剩下了什么2 天前
go语言 Ctx:「错误三:在 Context 中存储可变值」
开发语言·后端·golang