ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Methods and interfaces

2022-06-14 22:34:52  阅读:133  来源: 互联网

标签:Methods pointer interfaces value receiver interface type method


golang的数组是用花括号括起来的。

Method

A method is just a function with a receiver.

method: 

func (v type1) Abs() type2{ }

v.Abs()

function:

func Abs(v type1) type2 { }

Abs(v)

receiver的type得和method在同一个package中定义,不能直接用built-in type,如需要的话,可自定义type MyFloat float64

Pointer receiver and value receiver

pointer receiver 可以更改receiver指向的值,而value receiver只能在原值的复制上进行操作,无法更改原值。

参数为pointer的函数在调用时必须传入pointer,receiver为pointer的方法调用时可接收value or pointer作为receiver,go会自动将value.method()翻译为(&value).method()

参数为value的函数在调用时必须传入value,receiver为value的方法调用时可接收value or pointer作为receiver,go会自动将pointer.method()翻译为(*pointer).method

the reasons to choose a pointer receiver

1.可修改receiver指向的值

2. 避免在调用方法时对值的复制,相比receiver是个大型结构体时,效率更高。

interface

接口是一组方法签名

定义接口

type interface_name interface{

  method_name return_type

}

实现接口所有方法的type称为实现了该接口 

type隐式地实现接口,任何实现接口的类型的变量都可以赋给接口变量

interface value = (value, type)

一个接口变量调用方法相当于执行底层类型的同名方法

Note that an interface value that holds a nil concrete value is itself non-nil.

A nil interface value holds neither value nor concrete type.

调用nil interface的方法会出现runtime error,因为没有指示调用哪个具体类型的方法。

空接口empty interface在interface定义体内没有任何method,可用于处理任何类型的值,如fmt.Print

type assertion

t := i.(T)

如果接口变量i保存了具体类型T的值,则把T类型值赋给t;如果没有保存,则触发panic

t, ok := i.(T)

ok得到的值为boolean,为断言是否成功。

type switch   

括号内是关键字type

switch t := i.(type){

  case int:

    ...

  case string:

    ...

  default:

    ...

}

Stringer interface

type Stringer interface {

  String() string

}

实现String方法可自定义不同类型变量的fmt的Println

error

内置接口

nil error 表示语句执行成功 non-nil表示失败

io.Reader interface

func (T) Read(b []byte)(n int, err error)

标签:Methods,pointer,interfaces,value,receiver,interface,type,method
来源: https://www.cnblogs.com/hicuppers-/p/16318207.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有