副问题[/!--empirenews.page--]
(以下内容是我的硕士论文的摘录,险些是整个 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 协程和信道(一种基于 Hoare 的“通讯次序历程”理论的协程)提供内建的并发支持。2
Go 措施以包的情势组织。包本质是一个包括 Go 文件的文件夹。包内的全部文件共享沟通的定名空间,而包内的标记有两种可见性:以大写字母开头的标记对付其他包是可见,而其他标记则是该包私有的:
func PublicFunction() { fmt.Println("Hello world") } -
func privateFunction() { fmt.Println("Hello package") }
范例
Go 有一个相等简朴的范例体系:没有子范例(但有范例转换),没有泛型,没有多态函数,只有一些根基的范例:
- 根基范例:
int 、int64 、int8 、uint 、float32 、float64 等
struct
interface :一组要领的荟萃
map[K, V] :一个从键范例到值范例的映射
[number]Type :一些 Type 范例的元素构成的数组
[]Type :某种范例的切片(具有长度和成果的数组的指针)
chan Type :一个线程安详的行列
- 指针
*T 指向其他范例
- 函数
-
签字范例:也许具有关联要领的其他范例的别名(LCTT 译注:这里的别名并非指 Go 1.9 中的新特征“范例别名”):
type T struct { foo int } type T *T type T OtherNamedType
签字范例完全差异于它们的底层范例,以是你不能让它们相互赋值,但一些操纵符,譬喻 + ,可以或许处理赏罚统一底层数值范例的签字范例工具们(以是你可以在上面的示例中把两个 T 加起来)。
映射、切片和信道是相同于引用的范例——它们现实上是包括指针的布局。包罗数组(具有牢靠长度并可被拷贝)在内的其他范例则是值转达(拷贝)。
范例转换
范例转换相同于 C 或其他说话中的范例转换。它们写成这样子:
TypeName(value)
常量
Go 有“无范例”字面量和常量。
1 // 无范例整数字面量 const foo = 1 // 无范例整数常量 const foo int = 1 // int 范例常量
无范例值可以分为以下几类:UntypedBool 、UntypedInt 、UntypedRune 、UntypedFloat 、UntypedComplex 、UntypedString 以及 UntypedNil (Go 称它们为基本范例,其他基本种类可用于详细范例,如 uint8 )。一个无范例值可以赋值给一个从基本范例中派生的签字范例;譬喻:
type someType int -
const untyped = 2 // UntypedInt const bar someType = untyped // OK: untyped 可以被赋值给 someType const typed int = 2 // int const bar2 someType = typed // error: int 不能被赋值给 someType
接口和工具
正如上面所说的,接口是一组要领的荟萃。Go 自己不是一种面向工具的说话,但它支持将要领关联到签字范例上:当声明一个函数时,可以提供一个吸取者。吸取者是函数的一个特殊参数,可以在函数之前转达并参加函数查找,就像这样:
type SomeType struct { ... } type SomeType struct { ... } -
func (s *SomeType) MyMethod() { } -
func main() { var s SomeType s.MyMethod() }
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|