• Go没有类似python语言中类class的概念,但依旧有method

    • 类型方法定义格式如下

      func (a mytype) method_name(x type)(y type){ return y }
    • 调用方式:

      instance.method(args) -> (type).func(instance, args)
  • 通过显示的说明Receiver(强制函数传递的第一个参数)来实现与某个类型(struct,int...)的组合

    package main
    import "fmt" type A struct{
    Name Sting
    } func main() {
    a := A{} //实例化结构体
    a.Method_Print() //结构体调用方法
    } func (a A) Method_Print() { //强制将A(struct类型)作为第一个参数传递给Method_Print,从而说明此函数属于结构A的一个方法
    fmt.Println("This is a method for struct A")
    } /*输出
    This is a method for struct A
    */
  • 只能为同一个包package中的类型定义方法(method),不能为非本package中的类型定义方法,但是方法(这里指公有方法)是可以在其它包中调用。

  • 可以只用值或指针来调用方法,编译器会自动完成转换

    package main
    import "fmt" type A struct {
    Name string
    } type B struct {
    Name string
    } func main() {
    a := A{} //实例化结构体
    a.Method_Print() //结构体调用方法
    fmt.Println(a.Name) //指针传递时,不用使用`*a.Name`,解释器自动识别 b := B{}
    fmt.Println(b.Name)
    b.Method_Print()
    } func (a *A) Method_Print() { //方法传递结构体指针
    a.Name = "maozi"
    fmt.Println("This is a method for struct A")
    } func (b B) Method_Print() { //方法:传递结构
    b.Name = "Sazi" //这种方式只能进行值的拷贝,无法进行更改结构体属性(字段)
    fmt.Println("This is a method for struct B")
    } /*输出
    a.Method_Print--- This is a method for struct A
    a.Name--- maozi
    b.Name-- //空值,修改失败
    b.Method_Print This is a method for struct B
    */
  • 类型别名(如下代码INT为int类型的别名)不会拥有底层类型所附带的方法;可以为任一底层类型(int...)绑定一个方法,如下Method_Print

    package main
    import "fmt" type INT int //自定义一个类型INT,底层为int类型,INT就是底层类型int的一个别名 func main() {
    var a INT
    a.Method_Print() } func (a *INT) Method_Print() { //为int类型绑定一个方法
    fmt.Println("This is a method for int type ")
    } /*输出
    a.Method_Print---This is a method for int type
    */
  • Method Values 和 Method Expressions

    • Method Value 是包装后的状态对象,总是与特定的对象实例关联在一起

    • 调用方式类似python类的调用方式,先实例化一个类,在通过.属性调用

    • Method Expression是直接类型.method(var) 的方式

    package main
    import "fmt" type INT int //定义一个INT func main() {
    var a INT
    a.Method_Print() //method value调用方式
    (*INT).Method_Print(a) //method expression调用方式
    } func (a *INT) Method_Print() { //为int类型绑定一个方法
    fmt.Println("This is a method for int type ")
    }
    /*输出
    a.Method_Print---This is a method for int type
    */
  • 类方法名称冲突类似与字段的名称冲突,按继承顺序;如果外部结构和嵌入的结构体存在同名方法,则优先调用外部结构体的方法

  • 类方法访问权限:大写首字母表示外部可以访问,小写表示结构体类型的私有字段,私有字段和方法只能在同一个包中调用,只有公有方法(首字母大写)可以在包外调用

    package main
    import "fmt" type A struct {
    name string //小写首字母,私有字段
    } func main() {
    a := A{}
    a.Method_Print() //method value调用方式
    } func (a *A) Method_Print() {
    a.name = "123" //方法可以访问私有字段
    fmt.Println("This is a method for struct type ")
    } /*输出
    a.Method_Print---This is a method for int type
    */
  • 声明一个底层为int的类型,实现调用一个方法就递增250, 如x:=0,调用a.Increase(num)后,a从0变为250

    	package main
    import "fmt" type Ad int //声明底层类型为int类型
    func main() {
    var x Ad
    x.Add(250) //method value调用方式,方法传递参数num=100
    fmt.Println(a)
    }
    func (ad *Ad) Add(num int) { //为int类型绑定一个方法
    *ad += Ad(num) //强制类型转换为底层Ad---int型
    }
    /*输出
    a--->250
    */

golang基础--method方法的更多相关文章

  1. Golang 基础之基础语法梳理 (三)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...

  2. Java基础02 方法与数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

  3. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  4. GoLang基础数据类型-切片(slice)详解

    GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...

  5. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  6. GoLang基础数据类型--->字符串处理大全

    GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:   高级运维工程师之路               59843264 ...

  7. Golang 基础之基础语法梳理 (二)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...

  8. Golang基础教程

    以下使用goland的IDE演示,包含总计的golang基础功能共20个章节 一.go语言结构: 二.go基础语法: 三.变量 四.常量 五.运算符 六.条件语句 七.循环 八.函数 九.变量作用域 ...

  9. golang基础知识之encoding/json package

    golang基础知识之json 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.可以去json.org 查看json标准的清晰定义.json pack ...

随机推荐

  1. ORA-28001:口令已经失效

    Oracle11G创建用户时缺省密码过期限制是180天(即6个月),如果超过180天用户密码未做修改则该用户无法登录. 查看密码的有效期设置,LIMIT字段是密码有效天数. select * from ...

  2. 在oracle电子商务套件中输出信息

    一.用自定义用户HAND_SL登陆http://zd01.haasgz.hand-china.com:30000/ 添加可执行并发程序 执行文件名填写自己的包名称.入口函数/过程名 二.将可执行程序添 ...

  3. 激活老电脑的第二春:内存盘为Chrome浏览器做缓存

    AMD Radeon RAMDisk 4.2.1 正式版 下载地址:http://dl.pconline.com.cn/html_2/1/73/id=7204&pn=0.html 适用于:wi ...

  4. August 25th 2017 Week 34th Friday

    Stop to have a rest, do not forget others still in the running. 停下来休息的时候,不要忘记别人还在奔跑. You don't need ...

  5. Economy a Two-Edged Sword for Democrats

    2017-05-03 12:05:07 https://www.usnews.com/news/blogs/ken-walshs-washington/2014/10/03/economy-a-two ...

  6. java多态-向上转型和向下转型

    向上转型:符合“is a”,是安全的,子类向上到父类,多余的属性和方法会丢弃 向下转型:不安全的,用instanceof提前判断一下,以免抛出异常 instanceof用法: result = obj ...

  7. Java的Calendar类

    通过Date类我们可以创建并格式化一个日期对象,但是如何才能设置和获取日期数据的特定部分呢?----Calendar类 Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,通过getIn ...

  8. 【vue】饿了么项目-goods商品列表页开发

    1.flex 属性是 flex-grow.flex-shrink 和 flex-basis 属性的简写属性. flex-grow 一个数字,规定项目将相对于其他灵活的项目进行扩展的量. flex-sh ...

  9. nginx下配置多个web服务

    参考 nginx配置详解  nginx反向代理与负载均衡详解 一.nginx简介: Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能 ...

  10. PHP去重可用

    //国外 $arr6 = array_merge($arr2,$arr4); $arr8 = array(); $arr10 = array(); foreach($arr6 as $k6=> ...