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

Go编程语言的简单介绍

发布时间:2019-02-14 06:34:52 所属栏目:建站 来源:Julian Andres Klode
导读:(以下内容是我的硕士论文的摘录,险些是整个 2.1 章节,向具有 CS 配景的人快速先容 Go) Go 是一门用于并发编程的呼吁式编程说话,它首要由缔造者 Google 举办开拓,最初首要由 Robert Griesemer、Rob Pike 和 Ken Thompson 开拓。这门说话的计划起始于
副问题[/!--empirenews.page--]

Go编程说话的简朴先容

(以下内容是我的硕士论文的摘录,险些是整个 2.1 章节,向具有 CS 配景的人快速先容 Go)

Go 是一门用于并发编程的呼吁式编程说话,它首要由缔造者 Google 举办开拓,最初首要由 Robert Griesemer、Rob Pike 和 Ken Thompson 开拓。这门说话的计划起始于 2007 年,并在 2009 年推出最初版本;而第一个不变版本是 2012 年宣布的 1.0 版本。1

Go 有 C 气魄威风凛凛的语法(没有预处理赏罚器)、垃圾接纳机制,并且相同它在贝尔尝试室里被开拓出来的先进们:Newsqueak(Rob Pike)、Alef(Phil Winterbottom)和 Inferno(Pike、Ritchie 等人),行使所谓的 Go 协程goroutines信道channels(一种基于 Hoare 的“通讯次序历程”理论的协程)提供内建的并发支持。2

Go 措施以包的情势组织。包本质是一个包括 Go 文件的文件夹。包内的全部文件共享沟通的定名空间,而包内的标记有两种可见性:以大写字母开头的标记对付其他包是可见,而其他标记则是该包私有的:

  1. func PublicFunction() {
  2. fmt.Println("Hello world")
  3. }
  4.  
  5. func privateFunction() {
  6. fmt.Println("Hello package")
  7. }

范例

Go 有一个相等简朴的范例体系:没有子范例(但有范例转换),没有泛型,没有多态函数,只有一些根基的范例:

  1. 根基范例:intint64int8uintfloat32float64
  2. struct
  3. interface:一组要领的荟萃
  4. map[K, V]:一个从键范例到值范例的映射
  5. [number]Type:一些 Type 范例的元素构成的数组
  6. []Type:某种范例的切片(具有长度和成果的数组的指针)
  7. chan Type:一个线程安详的行列
  8. 指针 *T 指向其他范例
  9. 函数
  10. 签字范例:也许具有关联要领的其他范例的别名(LCTT 译注:这里的别名并非指 Go 1.9 中的新特征“范例别名”):

    1. type T struct { foo int }
    2. type T *T
    3. type T OtherNamedType

    签字范例完全差异于它们的底层范例,以是你不能让它们相互赋值,但一些操纵符,譬喻 +,可以或许处理赏罚统一底层数值范例的签字范例工具们(以是你可以在上面的示例中把两个 T 加起来)。

映射、切片和信道是相同于引用的范例——它们现实上是包括指针的布局。包罗数组(具有牢靠长度并可被拷贝)在内的其他范例则是值转达(拷贝)。

范例转换

范例转换相同于 C 或其他说话中的范例转换。它们写成这样子:

  1. TypeName(value)

常量

Go 有“无范例”字面量和常量。

  1. 1 // 无范例整数字面量
  2. const foo = 1 // 无范例整数常量
  3. const foo int = 1 // int 范例常量

无范例值可以分为以下几类:UntypedBoolUntypedIntUntypedRuneUntypedFloatUntypedComplexUntypedString 以及 UntypedNil(Go 称它们为基本范例,其他基本种类可用于详细范例,如 uint8)。一个无范例值可以赋值给一个从基本范例中派生的签字范例;譬喻:

  1. type someType int
  2.  
  3. const untyped = 2 // UntypedInt
  4. const bar someType = untyped // OK: untyped 可以被赋值给 someType
  5. const typed int = 2 // int
  6. const bar2 someType = typed // error: int 不能被赋值给 someType

接口和工具

正如上面所说的,接口是一组要领的荟萃。Go 自己不是一种面向工具的说话,但它支持将要领关联到签字范例上:当声明一个函数时,可以提供一个吸取者。吸取者是函数的一个特殊参数,可以在函数之前转达并参加函数查找,就像这样:

  1. type SomeType struct { ... }
  2. type SomeType struct { ... }
  3.  
  4. func (s *SomeType) MyMethod() {
  5. }
  6.  
  7. func main() {
  8. var s SomeType
  9. s.MyMethod()
  10. }

(编辑:河北网)

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

热点阅读