【愚公系列】2022年08月 Go教学课程 031-结构体方法
【摘要】 一、结构体方法 1.结构体方法的定义方法就是把某些逻辑代码封装到一起的集合,用固定格式包起来起个名字。go中的方法是一个函数,拥有附加的,单独元素的参数列表,称之为接收器。它被放在一个方法名之前。接收器的类型决定了如何使用方法。以下是为一个类型定义一个方法的语法func(对象 结构体类型) 方法名 (参数列表)(返回值列表) { 代码体} 2.方法的基本使用package mainimpo...
一、结构体方法
1.结构体方法的定义
方法就是把某些逻辑代码封装到一起的集合,用固定格式包起来起个名字。
go中的方法是一个函数,拥有附加的,单独元素的参数列表,称之为接收器。它被放在一个方法名之前。接收器的类型决定了如何使用方法。
以下是为一个类型定义一个方法的语法
func(对象 结构体类型) 方法名 (参数列表)(返回值列表) {
代码体
}
2.方法的基本使用
package main
import "fmt"
type Int int // type 为int类型指定了别名.
func (a Int) TestInt(b Int) Int {
return a + b
}
func main() {
var num Int = 10
var num1 Int = 20
n := num.TestInt(20)
n1 := num1.TestInt(5)
fmt.Println(n)
fmt.Println(n1)
}
package main
import "fmt"
type Student struct {
id int
name string
age int
}
// 接收者
func (s Student) PrintShow() {
fmt.Println(s)
}
func (s *Student) EditInfo() {
s.age = 20
}
func main() {
stu := Student{101, "张三", 18}
stu.PrintShow() // 完成对方法的调用, 将stu中的值,传递给了方法的s.
stu.EditInfo()
stu.PrintShow()
}
3.方法使用的注意事项
package main
import "fmt"
type Student struct {
id int
name string
age int
}
type Teacher struct {
id int
name string
}
func (s *Student) Show() {
fmt.Println(s)
}
func (t *Teacher) Show() {
fmt.Println(t)
}
func main() {
// 如果接收者类型不同,即使方法的名字是相同的也是不同的方法。
stu := Student{101, "李四", 18}
//(&stu).Show()
stu.Show()
teacher := Teacher{102, "老王"}
teacher.Show()
}
4.方法使用的案例
package main
import "fmt"
//定义一个学生类,有六个属性,分别为姓名、性别、年龄、语文、数学、英语成绩
//第一方法:打招呼的方法:介绍自己叫XX,今年几岁了。是男同学还是女同学。
//第二个方法:计算总分与平均分的方法
// 1: 定义结构体
type StudentInfo struct {
name string
sex string
age int
chinese float64
math float64
english float64
}
// 2: 添加方法
func (s *StudentInfo) SayHello(userName string, userAge int, userSex string) {
// 2.1 初始化
s.name = userName
s.age = userAge
s.sex = userSex
// 2.2 初始化后的值进行判断。
if s.sex != "男" && s.sex != "女" {
s.sex = "男"
}
if s.age < 1 || s.age > 100 {
s.age = 18
}
// 2.3 打印输出结果
fmt.Printf("我叫%s,年龄是%d,性别是%s\n", s.name, s.age, s.sex)
}
func (s *StudentInfo) GetScore(chinese float64, math float64, english float64) {
// 1: 初始化
s.chinese = chinese
s.math = math
s.english = english
// 2: 进行计算
sum := s.chinese + s.math + s.english
// 3: 打印输出结果
fmt.Printf("我叫%s,总分%f,平均分%f", s.name, sum, sum/3)
}
func main() {
var stu StudentInfo
stu.SayHello("张三", 180, "df")
stu.GetScore(90, 89, 87)
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)