首页 > 其他分享 >go in action学习,go语法一些特殊点

go in action学习,go语法一些特殊点

时间:2023-01-07 22:57:13浏览次数:40  
标签:xml 调用 string 接收者 语法 action go defaultMatcher 指针

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

相关文章

  • 适合编程初学者的开源项目:小游戏2048(Go语言版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • Markdown语法教程
    二级标题三级标题四级标题快捷键ctrl+1,2,3,4,5,6加粗用**1**我是加粗的文字快捷键ctrl+B斜体用*1*我是斜体的文字斜体并加粗用***1****我是斜体并......
  • go自学笔记
    自己啃官网,搞成能用的系统;]golang语言环境下载地址:http://go.p2hp.com/#google_vignette一直下一步安装,完成cmd:goversion看版本,是否安装成功在文件管理器......
  • 循环语句的语法:while/for/do..while/break和continue的使用以及冒泡法代码实现
    1、将两个变量的值交换.2、将一个数组中的数倒序输出. 3、找出数组里面最大的值,并返回 4、将数组所有的元素相加,将结果返回 5、将两个等长数组......
  • .net core操作MongoDB
    前言现实中认识的一个搞java(百万富婆)的大佬,已经转行做抖音主播了,搞技术的只能赶在年前再水一篇博客,不足之处欢迎拍砖,以免误人子弟,呔,真是太难受了环境准备.ne......
  • Golang入门到实战核心编程-第五章-程序流程控制
    目录1.程序流程控制1.1程序流程个控制介绍1.2三大流程控制介绍及案例1.2.1顺序流程控制1.2.1.1顺利流程控制介绍1.2.1.2顺序流程控制流程图1.2.1.3顺序流程控制案例......
  • Golang入门到实战核心编程-第四章-运算符
    目录1.运算符介绍2.算数运算符2.1算数运算符介绍2.2算数运算符一览2.3算数运算符案例2.4算数运算符细节说明3.关系运算符3.1关系运算符介绍3.2关系运算符一览3.3......
  • Golang入门到实战核心编程-第三章-变量
    目录1.Golang数据类型分类2.数据类型的默认值3.数据类型及大小3.1查看变量的数据类型3.2查看变量占用字节大小4.数据类型介绍4.1整数类型4.1.1整型各个类型对比4.1......
  • markdown语法
    markdown语法以下内容来源于https://www.runoob.com/markdown/md-tutorial.html目录1标题1.1使用=和-标记"一级标题"和"二级标题"1.2使用#标记标题2.换行,字体,分......
  • (转)go mod使用
    原文:https://www.jianshu.com/p/760c97ff644c最近由于换工作,开始交接工作。整理以前的工作内容,由于组内就我一个在做go和大数据。所以开发没有规划,当时是怎么快怎么来......