1 丰富的内置类型

2 函数多返回值

3 Go的错误处理 :   Go语言引入了3个关键字用于标准的错误处理流程,这3个关键字分别为defer、 panic和 recover

4 在Go语言中,所有的函数也是值类型: 可以作为参数传递。

5 类型和接口

Go语言的类型定义非常接近于C语言中的结构(struct),甚至直接沿用了struct关键字。相 
比而言, Go语言并没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承 
和重载,而只是支持了最基本的类型组合功能.

     它还引入了一个无比强大的“非侵入式” 接口的概念,让开发者从以往对C++和Java开发中的接口管理问题中解脱出来.

  在C++和java中,在实现一个接口之前必须先定义该接口,并且将类型和接口紧密绑定,即接口的修改 
会影响到所有实现了该接口的类型,而Go语言的接口体系则避免了这类问题,比较松散的对应关系可以大幅降低因为接 
口调整而导致的大量代码调整工作。

6 并发编程

  通过在函数调用前使用关键字go,我们即可让该函数以goroutine方式执行。 goroutine是一种 
比线程更加轻盈、更省资源的协程。 Go语言通过系统的线程来多路派遣这些函数的执行,使得 
每个用go关键字执行的函数可以运行成为一个单位协程。当一个协程阻塞的时候,调度器就会自 
动把其他协程安排到另外的线程中去执行,从而实现了程序无等待并行化运行。而且调度的开销 
非常小,一颗CPU调度的规模不下于每秒百万次,这使得我们能够创建大量的goroutine,从而可 
以很轻松地编写高并发程序,达到我们想要的目的。

  Go语言实现了CSP(通信顺序进程, Communicating Sequential Process)模型来作为goroutine 
间的推荐通信方式。在CSP模型中,一个并发系统由若干并行运行的顺序进程组成,每个进程不 
能对其他进程的变量赋值。进程之间只能通过一对通信原语实现协作。 Go语言用channel(通道) 
这个概念来轻巧地实现了CSP模型。 channel的使用方式比较接近Unix系统中的管道(pipe)概念, 
可以方便地进行跨goroutine的通信。 
另外,由于一个进程内创建的所有goroutine运行在同一个内存地址空间中,因此如果不同的 
goroutine不得不去访问共享的内存变量,访问前应该先获取相应的读写锁。 Go语言标准库中的 
sync包提供了完备的读写锁功能。

// mainfile
package main import (
"fmt"
) func sum(values []int, resultChan chan int) {
sum :=
for _, value := range values {
sum += value
}
resultChan <- sum // 将计算结果发送到channel中
}
func main() {
values := []int{, , , , , , , , , }
resultChan := make(chan int, )
go sum(values[:len(values)/], resultChan)
go sum(values[len(values)/:], resultChan)
sum1, sum2 := <-resultChan, <-resultChan // 接收结果
fmt.Println("Result:", sum1, sum2, sum1+sum2)
}

7 Go的 反射

8 GO语言交互性

补充 3:Golang 一些特性的更多相关文章

  1. flipt 一个基于golang 的特性工具开发类库

    以前介绍过一个Flagr 的基于golang 的特性功能开发类库(技术雷达推荐),今天看到一个类似也很不错的方案flipt 参考架构 包含的特性 快速,使用golang 编写,同时进行了性能优化 运行 ...

  2. 补充2:Golang 一些特性

    Go语言的这些地方都做的还不错: 拥有自动垃圾回收: 不用手动释放内存 一个包系统: Go 语言的源码复用建立在包(package)基础之上.包通过 package, import, GOPATH 操 ...

  3. Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性

    一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目 ...

  4. Golang channel 特性

    最近在项目中遇到了 Go channel 的一些问题,在此记录下 close channel 的一些特性. 关闭channel ch := make(chan bool) close(ch) clos ...

  5. golang语言特性

    1. 垃圾回收 a. 内存⾃动回收,再也不需要开发⼈员管理内存 b. 开发人员专注业务实现,降低了心智负担 c. 只需要new分配内存,不需要释放   2. 天然并发 a. 从语⾔层面⽀持并发,⾮常简 ...

  6. Go golang语言特性

    一.垃圾回收 1.内存自动回收. 2.只需要创建,不需要释放 二.天然并发: 1.语言层支持并发,对比python,少了GIL锁. 2.goroute,轻量级线程. 3.基于CSP模型实现 三.cha ...

  7. Golang 语言特性

    1. 函数 与c 语言不同,go 语言中,函数的参数和返回值都由栈来存储. 传值:函数调用时会复制参数,被调用方和调用方持有两份不相关的两份数据 传引用:函数调用时会传递参数指针,被调用方和调用方持有 ...

  8. C# 6 的新特性~

    原文地址 Mads Torgersen,微软 C# 程序管理者,它发布了一个视频,描述即将到来的下一个 C# 版本--C# 6.在 C# 6 的新特性之间,Mads 主要提到了 getter-only ...

  9. 4 个技巧学习 Golang

    到达 Golang 大陆:一位资深开发者之旅. 2014 年夏天…… IBM:“我们需要你弄清楚这个 Docker.” 我:“没问题.” IBM:“那就开始吧.” 我:“好的.”(内心声音):”Doc ...

随机推荐

  1. 【ssm】拦截器的原理及实现

    一.背景: 走过了双11,我们又迎来了黑色星期五,刚过了黑五,双12又将到来.不管剁手的没有剁手的,估计这次都要剁手了!虽然作为程序猿的我,没有钱但是我们长眼睛了,我们关注到的是我们天猫.淘宝.支付宝 ...

  2. memset,memcpy,strcpy

    http://www.cppblog.com/junfeng568/archive/2006/03/11/4022.html

  3. Android Kernel save defalut config

    /********************************************************************************* * Android Kernel ...

  4. LIBCURL踩坑记

    这里一个java程序员进行C++开发使用libcurl踩过的坑: 1.  发送指定请求类型body,比较通用方法如下,可以直接填写数据并手动指定content type,如果是form表单等形式,则需 ...

  5. MyEclipse 2014 破解图文详细教程

    一.安装完成MyEclipse2014(适用于2013等版本)后,不要打开软件,下载破解附件包. 破解附件包下载地址:点我下载 二.解压破解文件压缩包,得到一下文件列表: 三.双击run.bat,即可 ...

  6. 10款PHP开源网店系统

    在当今经济危机的大环境下,网上购物越来越来吃香,网上开店成本低,快捷方便,出名的电子商务网站有淘宝,拍拍,Ebay或是最新的百度有啊,这些网站都提供开店的机会,如果是想自己搭建购物平台,可以从下面选择 ...

  7. L2-013. 红色警报

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  8. redis sentinel 高可用(HA)方案部署,及python应用示例

    redis sentinel(哨兵)高可用集群的部署方法,并通过 python 程序实例讲解如何使用 redis sentinel 简介 介绍 redis sentinel(哨兵)集群的部署,配置一主 ...

  9. StreamSets SDC RPC Pipelines说明

    主要目的是进行跨pipeline 数据的通信,而不仅仅是内部pipeline 的通信,之间不同网络进行通信 一个参考图 pipeline 类型 origin destination 部署架构 使用多个 ...

  10. 一 JAVA整体概念以及安装部署

    JAVA 基本概念  JVM(JAVA virtual machine)java虚拟机,是java的能跨平台的核心,java的跨平台实现,就是在各种系统中布置JVM,然后java应用运行在JVM中,相 ...