其他分享
首页 > 其他分享> > Methods and interfaces

Methods and interfaces

作者:互联网

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