详解golang中的method

 更新时间:2021年01月06日 11:05:39   作者:雨燕  
这篇文章主要介绍了golang中的method的相关资料,帮助大家更好的理解和使用golang,感兴趣的朋友可以了解下

什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。

method的语法:

func (r Receiver) funcName (parameters) (result)

receiver可以看作是method的第一个参数,method并且支持继承和重写。

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

go version go1.12

/**
 * 什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。
 * method的语法:func (r Receiver) funcName (parameters) (result)。
 * receiver可以看作是method的第一个参数,method并且支持继承和重写。
 */
package main

import (
  "fmt"
)

type Human struct {
  name string
  age int
}

// 字段继承
type Student struct {
  Human // 匿名字段
  school string
}
type Employee struct {
  Human  // 匿名字段
  company string
}

// 函数的另外一种形态:method,语法:func (r Receiver) funcName (parameters) (result)
// method当作struct的字段使用
// receiver可以看作是method的第一个参数
// 指针作为receiver(接收者)和普通类型作为receiver(接收者)的区别是指针会对实例对象的内容发生操作,
// 普通类型只是对副本进行操作
// method也可以继承,下面是一个匿名字段实现的method,包含这个匿名字段的struct也能调用这个method
func (h *Human) Info() {
  // method里面可以访问receiver(接收者)的字段
  fmt.Printf("I am %s, %d years old\n", h.name, h.age)
}

// method重写,重写匿名字段的method
// 虽然method的名字一样,但是receiver(接收者)不一样,那么method就不一样
func (s *Student) Info() {
  fmt.Printf("I am %s, %d years old, I am a student at %s\n", s.name, s.age, s.school)
}
func (e *Employee) Info() {
  fmt.Printf("I am %s, %d years old, I am a employee at %s\n", e.name, e.age, e.company)
}
func main() {
  s1 := Student{Human{"Jack", 20}, "tsinghua"}
  e1 := Employee{Human{"Lucy", 26}, "Google"}
  // 调用method通过.访问,就像struct访问字段一样
  s1.Info()
  e1.Info()
}

以上就是详解golang中的method的详细内容,更多关于golang中的method的资料请关注脚本之家其它相关文章!

相关文章

  • golang实现对docker容器心跳监控功能

    golang实现对docker容器心跳监控功能

    这篇文章主要介绍了golang实现对docker容器心跳监控功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • gtoken替换jwt实现sso登录的排雷避坑

    gtoken替换jwt实现sso登录的排雷避坑

    这篇文章主要为大家介绍了gtoken替换jwt实现sso登录的排雷避坑,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言中你不知道的Interface详解

    Go语言中你不知道的Interface详解

    对于go语言来说,设计最精妙的应该是interface了,直白点说interface是一组method的组合。下面这篇文章主要给大家介绍了关于Go语言中你不知道的Interface的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2018-02-02
  • Go语言中利用http发起Get和Post请求的方法示例

    Go语言中利用http发起Get和Post请求的方法示例

    这篇文章主要给大家介绍了关于Go语言中利用http发起Get和Post请求的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Go语言题解LeetCode1266访问所有点的最小时间示例

    Go语言题解LeetCode1266访问所有点的最小时间示例

    这篇文章主要为大家介绍了Go语言题解LeetCode1266访问所有点的最小时间示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 聊聊golang中多个defer的执行顺序

    聊聊golang中多个defer的执行顺序

    这篇文章主要介绍了golang中多个defer的执行顺序,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • GPT回答go语言和C语言map操作方法对比

    GPT回答go语言和C语言map操作方法对比

    这篇文章主要为大家介绍了GPT回答go语言和C语言map操作方法对比,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Golang远程调用框架RPC的具体使用

    Golang远程调用框架RPC的具体使用

    Remote Procedure Call (RPC) 是一种使用TCP协议从另一个系统调用应用程序功能执行的方法。Go有原生支持RPC服务器实现,本文通过简单实例介绍RPC的实现过程
    2022-12-12
  • 提升Golang应用性能:深入理解Context的应用

    提升Golang应用性能:深入理解Context的应用

    本文将深入探讨如何通过深入理解和正确应用Go语言中的Context来提升应用性能。需要的朋友可以参考下
    2023-09-09
  • Go语言:打造优雅数据库单元测试的实战指南

    Go语言:打造优雅数据库单元测试的实战指南

    Go语言数据库单元测试入门:聚焦高效、可靠的数据库代码验证!想要确保您的Go应用数据层坚如磐石吗?本指南将手把手教您如何利用Go进行数据库单元测试,轻松揪出隐藏的bug,打造无懈可击的数据处理逻辑,一起来探索吧!
    2024-01-01

最新评论