运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

    • 前言

    • Go基础知识

    • Go基本语法

    • 实战项目:简单web服务

    • 基本数据类型

    • 内置运算符

    • 分支和循环

    • 函数 function

    • 结构体 struct

      • 结构体介绍
      • 结构体定义
      • 结构体方法和接收者
        • 3. 结构体方法和接收者
          • 3.1 结构体说明
          • 3.2 结构体方法和接收者
          • 3.3 值类型和指针类型接收者
          • 3.3.1 值类型的接收者
          • 3.3.2 指针类型的接收者
      • encoding-json包
    • 方法 method

    • 实战项目:跟踪函数调用链

    • 接口 interface

    • 并发 concurrency

    • 指针

    • 实战项目:实现轻量级线程池

    • 实战项目:实现TCP服务器

    • go常用包

    • Gin框架

    • go随记

  • Python

  • Shell

  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Go
  • 结构体 struct
lyndon
2022-06-07
目录

结构体方法和接收者

# 3. 结构体方法和接收者

# 3.1 结构体说明

在 go 语言中,没有类的概念但是可以给类型(结构体,自定义类型)定义方法(Method)。所谓方法就是定义了接收者的函数。

Go语言中的==方法(Method)是一种作用于特定类型变量的函数==。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。

方法的定义格式如下:

func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
	函数体
}
1
2
3

# 3.2 结构体方法和接收者

给结构体 Person 定义一个方法打印 Person 的信息

package main

import "fmt"

type Person struct {
   name string
   age  int
}

func (p Person) printInfo() {
   fmt.Printf("姓名:%v 年龄:%v", p.name, p.age) // 姓名:小王子 年龄:25
}

func main() {
   p1 := Person{
      name: "小王子",
      age:  25,
   }
   p1.printInfo()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3.3 值类型和指针类型接收者

# 3.3.1 值类型的接收者

当方法作用于值类型接收者时,Go 语言会在代码运行时将接收者的值复制一份 。

在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本 ,无法修改接收者变量本身。

# 3.3.2 指针类型的接收者

指针类型的接收者由一个结构体的指针组成。

由于指针的特性,调用方法时修改接收者指针的任意成员变量,在方法结束后,修改都是有效的。这种方式就十分接近于其他语言中面向对象中的 this 或者 self。

给结构体 Person 定义一个方法打印 Person 的信息

package main

import "fmt"

type Person struct {
   name string
   age  int
}

// 值类型接受者
func (p Person) printInfo() {
   fmt.Printf("姓名:%v 年龄:%v", p.name, p.age) // 姓名:小王子 年龄:25
}

//指针类型接收者
func (p *Person) setInfo(name string, age int) {
   p.name = name
   p.age = age
}

func main() {
   p1 := Person{
      name: "小王子",
      age:  25,
   }
   p1.printInfo() // 姓名:小王子 年龄:25
   p1.setInfo("张三", 20)
   p1.printInfo() // 姓名:张三 年龄:20
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
上次更新: 2022/06/12, 15:48:09
结构体定义
encoding-json包

← 结构体定义 encoding-json包→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式