2.7 Go 运行时(runtime)

尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime 类似 Java 和 .NET 语言所用到的虚拟机,它负责管理包括内存分配、垃圾回收(第 10.8 节)、栈处理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。

runtime 主要由 C 语言编写(Go 1.5 开始自举),并且是每个 Go 包的最顶级包。你可以在目录 $GOROOT/src/runtime 中找到相关内容。

垃圾回收器 Go 拥有简单却高效的标记-清除回收器。它的主要思想来源于 IBM 的可复用垃圾回收器,旨在打造一个高效、低延迟的并发回收器。目前 gccgo 还没有回收器,同时适用 gc 和 gccgo 的新回收器正在研发中。使用一门具有垃圾回收功能的编程语言不代表你可以避免内存分配所带来的问题,分配和回收内容都是消耗 CPU 资源的一种行为。

Go 的可执行文件都比相对应的源代码文件要大很多,这恰恰说明了 Go 的 runtime 嵌入到了每一个可执行文件当中。当然,在部署到数量巨大的集群时,较大的文件体积也是比较头疼的问题。但总得来说,Go 的部署工作还是要比 Java 和 Python 轻松得多。因为 Go 不需要依赖任何其它文件,它只需要一个单独的静态文件,这样你也不会像使用其它语言一样在各种不同版本的依赖文件之间混淆。

摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/02.7.md

如果后续用eclipse或者intelliJ Idea则看下

编辑器和集成开发环境

这些编辑器包含了代码高亮和其它与 Go 有关的一些使用工具:Emacs、Vim、Xcode 6、KD Kate、TextWrangler、BBEdit、McEdit、TextMate、TextPad、JEdit、SciTE、Nano、Notepad++、Geany、SlickEdit、IntelliJ IDEA 和 Sublime Text 2。

你可以将 Linux 的文本编辑器 GEdit 改造成一个很好的 Go 开发工具,详见页面:http://gohelp.wordpress.com/。

Sublime Text 是一个革命性的跨平台(Linux、Mac OS X、Windows)文本编辑器,它支持编写非常多的编程语言代码。对于 Go 而言,它有一个插件叫做 GoSublime 来支持代码补全和代码模版。

这里还有一些更加高级的 Go 开发工具,其中一些是以插件的形式利用本身是作为开发 Java 的工具。

IntelliJ Idea Plugin 是一个 IntelliJ IDEA 的插件,具有很好的操作体验和代码补全功能。

LiteIDE 这是一款专门针对 Go 开发的集成开发环境,在编辑、编译和运行 Go 程序和项目方面都有非常好的支持。同时还包括了对源代码的抽象语法树视图和一些内置工具(此开发环境由国人 vfc 大叔开发)。

GoClipse 是一款 Eclipse IDE 的插件,拥有非常多的特性以及通过 GoCode 来实现代码补全功能。

如果你对集成开发环境都不是很熟悉,那就使用 LiteIDE 吧,另外使用 GoClipse 或者 IntelliJ Idea Plugin 也是不错的选择。

代码补全 一般都是通过内置 GoCode 实现的(如:LieteIDE、GoClipse),如果需要手动安装 GoCode,在命令行输入指令 go get -u github.com/nsf/gocode 即可(务必事先配置好 Go 环境变量) 。

接下来会对这三个集成开发环境做更加详细的说明。

转载于:https://www.cnblogs.com/bonelee/p/6860590.html

go语言笔记——go是有虚拟机runtime的,不然谁来做GC呢,总不会让用户自己来new和delete进行内存管理吧,还有反射!Go 的 runtime 嵌入到了每一个可执行文件当中...相关推荐

  1. golang 数组 最后一个_Golang 内存管理

    对 Golang 感兴趣的同学欢迎关注公众号:golang-experts Golang 的内存管理基于 tcmalloc,可以说起点挺高的.但是 Golang 在实现的时候还做了很多优化,我们下面通 ...

  2. Go语言设计与实现 -- 内存管理器

    不同的编程语言选择不同的方式管理内存,本节会介绍Go语言内存分配器. Go内存分配的设计思想是: 内存分配算法采用Google的TCMalloc算法,每个线程都会自行维护一个独立的内存池,进行内存分配 ...

  3. JVM内存管理------JAVA语言的内存管理概述

    转载自  JVM内存管理------JAVA语言的内存管理概述 引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上 ...

  4. 第02章 c语言初探(c语言笔记)2.1 第一个 C 语言程序

    2.1 第一个 C 语言程序 写C/C++可以用这个软件: 打开这个软件,然后点击左上角的[文件],[新建],[源代码] 之后会出现这样的界面: 先写一个简单的程序: 然后点击[编译运行],如下图: ...

  5. go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针...

    切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型) ...

  6. C语言从入门到精通 【精读C Prime Plus】【C语言笔记1-4章节】【更新中~】

    知识来源[C Prime Plus 第六版][互联网] 目录 前言 一.初识C语言 C语言的特点及关键词 编译器 C语言编程的基本策略: 二.简单C程序示例概述 三.数据和C (一些基础知识) 变量和 ...

  7. C语言笔记(1.2版本,目前22000字)----未完待续

    目录 前言 0.基础常识 (1)进制 (2)变量与常量 (3)内存 (4)其它零零碎碎的点 (5)运算符 1.关键字 1.switch 2.关键字总览(不需要记,认识即可) 2.分支和循环 3.函数 ...

  8. C语言笔记(1.3版本,目前3.5w字)----未完待续

    目录 前言 0.基础常识 (1)进制 (2)变量与常量 (3)内存 (4)其它零零碎碎的点 (5)运算符 1.关键字 1.switch 2.关键字总览(不需要记,认识即可) 3.函数 4.数组 5.指 ...

  9. Shell脚本语言笔记

    Shell脚本语言笔记 一.shell是什么? 二.Shell 是一种脚本语言 1.定义变量 2.单引号和双引号的区别: 3.将命令的结果赋值给变量,常见的有以下两种方式: 4.只读变量 5.删除变量 ...

最新文章

  1. 正确“假期休息模式”
  2. AIFramework基本概念整理
  3. Using Regular Expression to validate a Guid
  4. thymeleaf th:if 案例
  5. windows10大瘦身 - Chrome文件夹下可以删除的临时js文件
  6. 【爬虫剑谱】一卷1章 软件篇-Mongodb的安装及配置
  7. 用递归的方式处理数组 把递归方法方法定义到数组的原型上 (这是一次脑洞大开的神奇尝试)...
  8. springmvc中@PathVariable和@RequestParam的区别(百度收集)
  9. 智慧交通不能用WiFi,还能算是智慧出行吗?
  10. 3D数学---坐标空间
  11. kvaser二次开发
  12. SOLIDWORKS Composer制作动画的方法
  13. searchview怎么改hint大小_老司机偷偷告诉你:改水电一般多少钱?水电改造价格怎么算?...
  14. android 触摸事件流程。
  15. 基于RV1126 Video分析-----驱动各模块总览
  16. 啦啦啦一棵R语言圣诞树~
  17. 信号与系统--连续时间系统分析
  18. 基于支付宝微信通知的一种个人收款回调方案
  19. 腾讯云在线WebShell终端使用体验
  20. 智能交通行业车车通信和车路通信成为ITS下一个技术亮点

热门文章

  1. hdfs文档存储服务器,一文读懂HDFS分布式存储框架分析
  2. 简书python自动化运维_简明Python开发教程(4):网络自动化运维的曙光
  3. mysql压力测试教程_Mysqlslap MySQL压力测试工具 简单教程
  4. 测绘技术设计规定_1:2000地形图项目测绘(航测)技术设计书(文档可下载)
  5. python【蓝桥杯vip练习题库】ALGO-75筛选号码(约瑟夫环)
  6. linux i2c调试命令,嵌入式Linux下I2C接口调试
  7. python中栈_Python中的栈
  8. python 多线程ping测试_从线程ping多个ip时Python ICMP ping实现?
  9. 商丘网络推广是如何做好网站优化的关键词布局的呢?
  10. 长沙网络推广教你如何在网站优化中让URL标准化?