title: Golang学习笔记(一)
date: 2019-05-16 21:28:57
tags:
Go 语言(或 Golang)是 Google 在 2007 年开发的一种开源编程语言,于 2009 年 11 月 10 日向全球公布。Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++等编译型语言的性能与安全性”。
简介
除了OOP外,近年出现了一些小众的编程哲学,Go语言对这些思想亦有所吸收。例如,Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。
开发速度
go语言让分享自己的类库更加简单,编译速度非常的快,编译整个go语言源码树,只需要20s。它是介于python的快速开发和c的告诉运行之间的语言。语法简洁,有自带的垃圾回收机制,也可帮忙捕获字段的类型。
并发
goroutine很像线程,但是它占用的内存远远比线程少。通道是一种内置的数据结构,可以让用户在不同的goroutine之间同步发送具有类型的消息。这让编程模型更加倾向于在goroutine之间发送消息,而不是互相争夺资源。
goroutine是可以与其他goroutine并行执行的函数,同时也会与主函数并行来执行。在go语言中使用同一个线程来执行多个goroutine。go语言运行时候会自动配置一组逻辑处理器,用来调度和执行goroutine。每个逻辑处理器绑定在操作系统的线程上,这让用户的执行效率高,而并发量显著减少了。
通道
通道是一种数据结构,可以让goroutine之间进行安全通信,通道可以避免共享内存访问问题。
如果使用全局变量或者共享内存,必须使用复杂的锁规则来防止并发的安全。
通道提供了一种新的模式,通道这一种模式。通道这一模式保证了同一时刻只会有一个goroutine修改数据。通道用于几个交互的goroutine之间发送数据。
两个goroutine之间传输数据是同步的,当传输数据完成之后,两个goroutine都知道数据已经传输完成了。通道并不提供跨goroutine数据访问保护机制。如果通过通道数据传输一份副本,各自对自己的副本做修改是安全的。当传输的是指向数据的指针时,如果读和写是由不同的 goroutine 完成的,每个 goroutine 依旧需要额外的同步动作。
go语言的类型系统
提供了灵活的,无需继承的类型系统,无需降低性能就能大幅度的复用代码。这个类型系统仍然是基于面向对象开发。go开发使用组合设计模式。简单的将一个类型嵌套进另一个类型,就能复用所有的功能。一个类型由其他更微小的类型组合而成。避免了继承模型。
在go中,不需要声明某个函数实现了某个接口,编译器会判断一个类型的实例是否符合正在使用的接口。
如果一个实例的类型实现了一个接口,意味着这个实例可以运行。
网友评论