For-learning-Go-Tutorial

Go语言是谷歌2009发布的第二款开源编程语言。

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

因而一直想的是自己可以根据自己学习和使用Go语言编程的心得,写一本Go的书可以帮助想要学习Go语言的初学者快速入门开发和使用!

在 Golang 中,interface 是一个非常重要的概念和特性。

接口(Interface)

在Go语言中,函数和方法不太一样,有明确的概念区分。其他语言中,比如Java,一般来说,函数就是方法,方法就是函数,但是在Go语言中, 函数是指不属于任何结构体、类型的方法,也就是说,函数是没有接收者的;而方法是有接收者的,我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的。

在 Golang 中,interface 是一种抽象类型,相对于抽象类型的是具体类型(concrete type):int,string。如下是 io 包里面的例子。

  1. // Writer is the interface that wraps the basic Write method.
  2. //
  3. // Write writes len(p) bytes from p to the underlying data stream.
  4. // It returns the number of bytes written from p (0 <= n <= len(p))
  5. // and any error encountered that caused the write to stop early.
  6. // Write must return a non-nil error if it returns n < len(p).
  7. // Write must not modify the slice data, even temporarily.
  8. //
  9. // Implementations must not retain p.
  10. type Writer interface {
  11. Write(p []byte) (n int, err error)
  12. }
  13. // Closer is the interface that wraps the basic Close method.
  14. //
  15. // The behavior of Close after the first call is undefined.
  16. // Specific implementations may document their own behavior.
  17. type Closer interface {
  18. Close() error
  19. }

在 Golang中,interface是一组 method 的集合,是 duck-type programming 的一种体现。不关心属性(数据),只关心行为(方法)。 具体使用中你可以自定义自己的 struct,并提供特定的 interface 里面的 method 就可以把它当成 interface 来使用。 下面是一种 interface 的典型用法,定义函数的时候参数定义成 interface,调用函数的时候就可以做到非常的灵活。

  1. type FirstInterface interface{
  2. Print()
  3. }
  4. func TestFunc(x FirstInterface) {}
  5. type PatentStruct struct {}
  6. func (pt PatentStruct) Print() {}
  7. func main() {
  8. var pt PatentStruct
  9. TestFunc(me)
  10. }