Golang学习笔记(二)

· · 545 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


title: Golang学习笔记(二)
date: 2019-05-20 21:55:33
tags:


基本语法

可以从以下程序介绍一个go程序的运行规则

package main
import(
"log"
"os"
_ "github.com/goinaction/code/chapter2/sample/matchers"
)

func init(){
      os.set();
     log.SetOutput(os.Stdout);
}

func main(){
     serarch.Run("president")
}

package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。这跟java语法相似。不同的是在java中,main函数是默认的程序入口。
import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。如import中第三个包所示,“_”指的是让go语言对包做初始化操作,但是并不使用包里的标识符。

func main() 是程序开始执行的函数。main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)

第三方包必须写清楚完整的路径如包三,与第三方包不同,从标准库中导入代码时,只需要给出要导入的包名。编译器查找包的时候,总是会到 GOROOT 和 GOPATH 环境变量引用的位置去查找。在程序内部,变量没有定义在任何函数作用域内,会被当成包级变量。

函数

make(map[string]Matcher)

map 是 Go 语言里的一个引用类型,需要使用 make 来构造。map的作用是如果值存在,会返回这个值的副本,如果这个值不存在,会返回这个值对应类型的空值。

feeds, err := RetrieveFeeds()
if err != nil {
log.Fatal(err)
}
results := make(chan *Result)

在 Go 语言中,所有变量都被初始化为其零值/nil。且允许一个函数返回多个值,像 RetrieveFeeds 函数这
样声明一个函数返回一个值和一个错误值。

使用内置的make函数创建一个无缓冲的通道(关于通道的概念,上篇已经说明,这里想到java的GUI的实现就是用到了管道进行消息传输)。在调用 make 的同时声明并初始化该通道变量。
如果需要声明初始值为零值的变量,应该使用 var 关键字声明变量。var关键字类似于js中,如果不加var,变量就会被声明为全局变量。

for _, feed := range feeds {

这里的下划线标识符的作用是占位符,占据了保存 range 调用返回的索引值的变量的位置。也就是把不需要的返回值忽略掉,之上说过,go允许函数返回两个变量。关键字 range 可以用于迭代数组、字符串、切片、映射和通道。

一个 goroutine 是一个独立于其他函数运行的函数。使用关键字 go 启动一个 goroutine,并做并发调度

go func(matcher Matcher, feed *Feed) {

}

这里使用了go启用了一个匿名函数,甚至于匿名函数里还可以传入参数,这样可以并发地独立处理每个数据源的数据。变量 feed 是一个指针变量。指针变量可以方便地在函数之间共享数据。指针变量可以在别的函数或者其他作用域声明,他可以在函数中作为共享数据,可以被修改。

在go语言中,所有变量都是以值的方式传递,因为指针变量传递的是地址值,所以也是以值的方式传递。
go语言支持闭包。因为有了闭包,函数可以直接访问到那些没有直接作为参数传入的变量。闭包的概念可以简单理解为能够读取其他函数内部变量的函数,且存在内存中。

Go 编译器可以根据赋值运算符右边的值来推导类型,声明常量的时候不需要指定类型。

最佳实践

将方法的接收者声明为指针,因为大部分方法在被调用后都需要维护接收者的值的状态。但是如果是通过接口类型调用方法时候是需要做出改变的。当接口类型为指针时候,接受者可以声明为指针。当接口类型为值时候,接受者方法为指针是不可以调用。当接受者方法为值时候,无论借口类型为何,都可以被调用。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:

查看原文:Golang学习笔记(二)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

545 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传