#yyds干货盘点#愚公系列2022年08月 Go教学课程 031-结构体方法

Posted 愚公搬代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#愚公系列2022年08月 Go教学课程 031-结构体方法相关的知识,希望对你有一定的参考价值。

一、结构体方法

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 := Student101, "张三", 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 := Student101, "李四", 18
    //(&stu).Show()
    stu.Show()
    teacher := Teacher102, "老王"
    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)

以上是关于#yyds干货盘点#愚公系列2022年08月 Go教学课程 031-结构体方法的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#愚公系列2022年08月 Go教学课程 021-Go容器之切片操作

#yyds干货盘点#愚公系列2022年08月 Go教学课程 002-Go语言环境安装

#yyds干货盘点#愚公系列2022年08月 Go教学课程 031-结构体方法

#yyds干货盘点#愚公系列2022年08月 Go教学课程 035-接口和继承和转换与空接口

#yyds干货盘点#愚公系列2022年08月 Go教学课程 032-结构体方法继承

#yyds干货盘点#愚公系列2022年08月 Go教学课程 027-深拷贝和浅拷贝