加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Go编程语言的简单介绍

发布时间:2019-02-14 21:32:57 所属栏目:建站 来源:Julian Andres Klode
导读:副标题#e# (以下内容是我的硕士论文的摘录,几乎是整个 2.1 章节,向具有 CS 背景的人快速介绍 Go) Go 是一门用于并发编程的命令式编程语言,它主要由创造者 Google 进行开发,最初主要由 Robert Griesemer、Rob Pike 和 Ken Thompson 开发。这门语言的设

如果对象实现了所有方法,那么它就实现了接口;例如,*SomeType(注意指针)实现了下面的接口 MyMethoder,因此 *SomeType 类型的值就能作为 MyMethoder 类型的值使用。最基本的接口类型是 interface{},它是一个带空方法集的接口 —— 任何对象都满足该接口。

  1. type MyMethoder interface {
  2. MyMethod()
  3. }

合法的接收者类型是有些限制的;例如,具名类型可以是指针类型(例如,type MyIntPointer *int),但这种类型不是合法的接收者类型。

控制流

Go 提供了三个主要的控制了语句:ifswitchfor。这些语句同其他 C 风格语言内的语句非常类似,但有一些不同:

  • 条件语句没有括号,所以条件语句是 if a == b {} 而不是 if (a == b) {}。大括号是必须的。
  • 所有的语句都可以有初始化,比如这个 if result, err := someFunction(); err == nil { // use result }
  • switch 语句在分支里可以使用任何表达式
  • switch 语句可以处理空的表达式(等于 true
  • 默认情况下,Go 不会从一个分支进入下一个分支(不需要 break 语句),在程序块的末尾使用 fallthrough 则会进入下一个分支。
  • 循环语句 for 不仅能循环值域:for key, val := range map { do something }

Go 协程

关键词 go 会产生一个新的 Go 协程goroutine,这是一个可以并行执行的函数。它可以用于任何函数调用,甚至一个匿名函数:

  1. func main() {
  2. ...
  3. go func() {
  4. ...
  5. }()
  6.  
  7. go some_function(some_argument)
  8. }

信道

Go 协程通常和信道channels结合,用来提供一种通信顺序进程的扩展。信道是一个并发安全的队列,而且可以选择是否缓冲数据:

  1. var unbuffered = make(chan int) // 直到数据被读取时完成数据块发送
  2. var buffered = make(chan int, 5) // 最多有 5 个未读取的数据块

运算符 <- 用于和单个信道进行通信。

  1. valueReadFromChannel := <- channel
  2. otherChannel <- valueToSend

语句 select 允许多个信道进行通信:

  1. select {
  2. case incoming := <- inboundChannel:
  3. // 一条新消息
  4. case outgoingChannel <- outgoing:
  5. // 可以发送消息
  6. }

defer 声明

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!