前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年08月 Go教学课程 031-结构体方法

【愚公系列】2022年08月 Go教学课程 031-结构体方法

作者头像
愚公搬代码
发布2022-09-20 14:52:41
1030
发布2022-09-20 14:52:41
举报
文章被收录于专栏:历史专栏

文章目录


一、结构体方法

1.结构体方法的定义

方法就是把某些逻辑代码封装到一起的集合,用固定格式包起来起个名字。

go中的方法是一个函数,拥有附加的,单独元素的参数列表,称之为接收器。它被放在一个方法名之前。接收器的类型决定了如何使用方法。

以下是为一个类型定义一个方法的语法

代码语言:javascript
复制
func(对象 结构体类型) 方法名 (参数列表)(返回值列表) {
	代码体
}

2.方法的基本使用

代码语言:javascript
复制
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)

}
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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.方法使用的注意事项

代码语言:javascript
复制
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.方法使用的案例

代码语言:javascript
复制
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)
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/08/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、结构体方法
    • 1.结构体方法的定义
      • 2.方法的基本使用
        • 3.方法使用的注意事项
          • 4.方法使用的案例
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档