方法

Go语言同时有函数和方法,方法的本质是函数,但是方法和函数又有所不同。

函数(function)是一段具有独立功能的代码,可以被反复多次调用,从而实现代码复用。

方法(method)是一个类的行为功能,只有该类的对象才能调用。

定义:

func(接收者  接收者类型)方法名(参数列表)(返回值列表){
// 方法体
}

接受者中的变量在命名时,官方建议使用接受者类型的第一个小写字母。

package main

import "fmt"

type Flowers struct {
name string
color string
}
func main() {
f1:=Flowers{"红玫瑰","红"}
f1.printFlower()
printFlower(f1)
}
//方法
func (f Flowers) printFlower() {
fmt.Println(f)
}
//函数
func printFlower(f Flowers){
fmt.Println(f)
}

使用方法的原因:

  • Go不是一种纯粹面向对象的编程语言,它不支持类。因此其方法旨在实现类似于类的行为。
  • 相同名称的方法可以在不同的类型上定义,而具有相同名称的函数是不允许的。

方法的继承

方法是可以继承的,如果匿名字段实现了一个方法,那么包含这个匿名字段的struct也能调用该匿名字段中的方法

package main

import "fmt"

// 方法的继承
type Human struct {
name string
age int
}
type Students struct {
Human //匿名对象
class string
}
type Teachers struct {
Human// 匿名对象
address string
}
func main() {
s:=Students{Human{"xiaoming",18}, "Senior one"}
s.print()
}
func (h *Human)print() {
fmt.Println(h)
}

方法的重写

在Go语言中,方法重写是指一个包含了匿名字段的struct也实现了该匿名字段实现的方法。

package main

import "fmt"

// 方法的继承
type Human struct {
name string
age int
}
type Students struct {
Human //匿名对象
class string
}
type Teachers struct {
Human// 匿名对象
address string
}
func main() {
s:=Students{Human{"xiaoming",18}, "Senior one"}
s.print()
}
func (h *Human)print() {
fmt.Println(h)
}
func (s *Students) print(){
fmt.Println(s)
}

Go-22-方法的更多相关文章

  1. excel转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法

    源数据日期格式:例如: 20160420 20160422 目标日期格式类型: 2016-4-20 2016-4-22 或 2016/04/20 2016/04/22 方法: 一.选中相应数据的单元格 ...

  2. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  3. 获取Url地址中参数的3种方法【华为云技术分享】

    获取Url的代码如下:window.location.href; 方法一:原生js(假设已经获得了Url地址) var url = 'https://gitbook.cn/gitchat/geekbo ...

  4. java 保留小数点后指定位数四种方法

    1 package com.itheima_01; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 impor ...

  5. Mybatis-Plus常用的查询方法--看这一篇就够了!!!

    前言: Mybatis-Plus作为Mybatis的增强,自己封装了很多简单还用的方法,来解脱自己写sql! 对于项目的搭建小编就不在说了,可以参考: SpringBoot+Mybatis-Plus的 ...

  6. ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

    我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...

  7. Java中List循环遍历的时候删除当前对象(自己)

    方法一 Java代码   ArrayList<String> list = new ArrayList<String>();           list.add(" ...

  8. js中二维数组的初始化

    在编程过程中,很多情况下(涉及到坐标.层级操作)我们都会用到二维数组,下面介绍介绍几种二维数组初始化的方法: 方法一.直接定义并且初始化,这种情况适用于数量和值已知的数组: var arr=[[&qu ...

  9. 【整理】C#文件操作大全(SamWang)<转>

    文件与文件夹操作主要用到以下几个类: 1.File类: 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. msdn:http://msdn.microsof ...

  10. python3.5------day3-数据结构(dict,file)

    字典(dict) 字典的定义: 字典的形式是以key:values.{key1,values,key2,values} 特性: 1.可以存放多个值 2.字典是无需的 3.字典的key是唯一,有去重功能 ...

随机推荐

  1. 1047 Student List for Course ——PAT甲级真题

    1047 Student List for Course Zhejiang University has 40,000 students and provides 2,500 courses. Now ...

  2. three.js cannon.js物理引擎之ConvexPolyhedron多边形

    年后第一天上班,郭先生来说一说cannon.js的ConvexPolyhedron(多边形),cannon.js是一个物理引擎,内部通过连续的计算得到各个时间点的数据的状态,three.js的模型可以 ...

  3. Go | Go 结合 Consul 实现动态反向代理

    Go 结合 Consul 实现动态反向代理 代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端. Table of Contents 反向代理 实现逻辑 Go ...

  4. docker启动ubuntu的桌面环境

    一.概述 由于最近一段时间在家办公,国内服务器在阿里云,国外站点在aws.家里的移动宽带比较差,无法访问aws. 所以尝试在阿里云启动docker,找到一个lxde桌面环境的ubuntu镜像. 二.启 ...

  5. 剑指 Offer 15. 二进制中1的个数

    剑指 Offer 15. 二进制中1的个数 Offer 15 题目描述: 方法一:使用1逐位相与的方式来判断每位是否为1 /** * 方法一:使用1逐位与的方法 */ public class Off ...

  6. 03----python入门----函数相关

    一.前期知识储备 函数定义 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号  () 任何传入参数和自变量必须放在圆括号中间,圆括号 ...

  7. IDEA中便捷内存数据库H2的最简使用方式

    在IDEA中有时候为了练习,需要使用到数据库,但如果自己工作或开发机子上本来没有安装数据库,也没有可用的远程数据库时,我们可以直接在IDEA环境上使用便捷式的内存数据库H2,关于H2更多知识就自己去找 ...

  8. c++随机数问题研究

    1.问题背景 某项目中有个复杂的排序,先是各种规则依次排序,最后如果依然并列的话,那就随机位置,名次并列.测试中发现一个诡异现象,并列时随机排序但随机后2个case打印的顺序每次都一样,随机数没有起到 ...

  9. 测试平台系列(5) 引入Ant Design Pro

    引入Ant Design Pro 回顾 还是继续回顾下之前的作业, 返回的中文变成了ascii字符,不要紧,我们光荣地百度一哈. 随便点进去看看,都可以找到正确答案: 可以看到,我们需要修改confi ...

  10. FreeBSD 将降低对 i386 架构的支持力度

    FreeBSD 开发团队宣布,从 FreeBSD 13.0 开始,对 i386 架构的支持级别将降级为 Tier 2,未来的 14.0 可能还将会在此基础上进一步降低对 i386 架构的支持.而对于 ...