011.golang 方法 method

本文深入探讨了Go语言中方法的概念及使用方式,包括方法如何与特定类型关联、方法调用的特点、类型别名与方法的关系等。此外还介绍了方法如何处理结构体内部的私有字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法method

  • Go 中虽没有class,但依旧有method
  • 通过显示说明receiver来实现与某个类型的组合
  • 只能为同一个包中的类型定义方法
  • Receiver 可以是类型的值或者指针
  • 不存在方法重载
  • 可以使用值或指针来调用方法,编译器会自动完成转换
  • 从某种意义上来说,方法是函数的语法糖,因为receiver其实就是
  • 方法所接收的第1个参数(Method Value vs. Method Expression)
  • 如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法
  • 类型别名不会拥有底层类型所附带的方法
  • 方法可以调用结构中的非公开字段

package main

import (
    "fmt"
)

type A struct {
    Name string
}

type B struct {
    Name string
}

func main() {
    //Receiver 可以是类型的值或者指针
    a := A{}
    a.Print()
    fmt.Println(a.Name) //打印为修改后的值

    b := B{}
    b.Print()
    fmt.Println(b.Name) //打印为空
}

//引用类型,指针的拷贝
func (a *A) Print() {
    a.Name = "AA"
    fmt.Println("A...")
}

//值类型,值得拷贝
func (b B) Print() {
    b.Name = "BB"
    fmt.Println("B...")
}

这里写图片描述


package main

import (
    "fmt"
)

type TTT int

func main() {
    //类型别名不会拥有底层类型所附带的方法
    var a TTT
    fmt.Println(a)
    a.Print()        //Method Value
    (*TTT).Print(&a) //Method Expression
}

func (a *TTT) Print() {
    fmt.Println("TTT", a)
}

这里写图片描述


package main

import (
    "fmt"
)

type A struct {
    name string //同一个包来讲,私有的也是可见的
}

func main() {
    //方法可以调用结构中的非公开字段
    a := A{}
    a.Print()
    fmt.Println(a.name)
}

func (a *A) Print() {
    a.name = "123"
    fmt.Println(a)
}

这里写图片描述


package main

import (
    "fmt"
)

type A int

func (a *A) Increase(num int) {
    *a += A(num)
}

func main() {
    //声明一个底层类型为int的类型,并实现调用某个方法就递增100
    var a A
    a.Increase(100)
    fmt.Println(a)
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值