1.如果接口类型只包含一个方法,那么这个类型的名字以 er 结尾。如果接口类型内部声明了多个方法,其名字需要与其行为关联。
2.如果要让一个用户定义的类型实现一个接口,这个用户定义的类型要实现接口类型里声明的所有方法。
3.实现一个接口时,使用一个空结构声明了具体的结构类型,这样空结构在创建实例时,不会分配任何内存。这种结构很适合创建没有任何状态的类型。
4.如果声明函数的时候带有接收者,则意味着声明了一个方法。这个方法会和指定的接收者的 类型绑在一起。即可以使用这个类型的值或者指向这个类型值的指针来调用这个方法。
函数带有接受者 -> 可以理解为接口的实现者,只有这个类型的对象,才可以调用这个具体的函数。同时往往会定义一个没有接受者的函数,即一个抽象层。
func Search(feed *Feed, searchTerm string)
// 方法声明为使用 defaultMatcher 类型的值作为接收者 func (m defaultMatcher) Search(feed *Feed, searchTerm string) // 方法声明为使用指向 defaultMatcher 类型值的指针作为接收者 func (m *defaultMatcher) Search(feed *Feed, searchTerm string)
5.因为大部分方法在被调用后都需要维护接收者的值的状态,所以会将方法的接收者声明为指针。
6.使用指针作为接收者声明的方法,只能在接口类型的值是一个指针的时候被调用。使用值作为接收者声明的方法,在接口类型的值为值或者指针时,都可以被调用。
// 方法声明为使用指向 defaultMatcher 类型值的指针作为接收者 func (m *defaultMatcher) Search(feed *Feed, searchTerm string) // 通过 interface 类型的值来调用方法 var dm defaultMatcher var matcher Matcher = dm // 将值赋值给接口类型 matcher.Search(feed, "test") // 使用值来调用接口方法 > go build
// 编译报错 cannot use dm (type defaultMatcher) as type Matcher in assignment
// 方法声明为使用 defaultMatcher 类型的值作为接收者 func (m defaultMatcher) Search(feed *Feed, searchTerm string) // 通过 interface 类型的值来调用方法 var dm defaultMatcher var matcher Matcher = &dm // 将指针赋值给接口类型 matcher.Search(feed, "test") // 使用指针来调用接口方法 > go build Build Successful
7.通道会一直被阻塞,直到有结果写入 。如果使用for 循环,一旦通道被关闭,循环就会终止,所以一般会用另一个goroutine来接受通道。
8.在main import进的package里面的文件init函数,就会在main执行前被调用。
9.结构体的标签用法,但使用标签会有效率问题,微服务的话,json传递信息时有另外一种方式 用proto
type ( // item 根据 item 字段的标签,将定义的字段 // 与 rss 文档的字段关联起来 item struct { XMLName xml.Name `xml:"item"` PubDate string `xml:"pubDate"` Title string `xml:"title"` Description string `xml:"description"` Link string `xml:"link"` GUID string `xml:"guid"` GeoRssPoint string `xml:"georss:point"` }
10.导入包时,使用‘_’使用下划线标识符作为别名导入包,可以让main.go 代码文件里的代码并没有直接使用任何包里的标识符,但一样会在main执行前执行init的调用并不报错。
11.每个代码文件都属于一个包,而包名应该与代码文件所在的文件夹同名。
12.Go 语言提供了多种声明和初始化变量的方式。如果变量的值没有显式初始化,编译器会 将变量初始化为零值。
13.使用指针可以在函数间或者 goroutine 间共享数据。通过启动 goroutine 和使用通道完成并发和同步。
14.在 Go 语言里,包是个非常重要的概念。其设计理念是使用包来封装不同 语义单元的功能。
标签:xml,调用,string,接收者,语法,action,go,defaultMatcher,指针 From: https://www.cnblogs.com/klm-kain/p/17033781.html