Go语言小书 | 小试牛刀,从hello world开始
引言
接着我们这本小册子的内容,今天我们手动实现一个hello world输出, 这是编程的惯例,用于测验环境搭建是否简单上手,或者是否准备好了基本的条件。
学习时间
垃圾回收
有些变量,在创建时,有一个容易定义的生活。例如,函数的本地变量在函数退出时消失。在其他情况下,就不那么明显了——至少对编译器来说是这样。
例如,函数返回的变量或其他变量和对象引用的变量的生存期可能很难确定。如果没有垃圾收集,则在开发人员知道不需要这些变量的时候,由开发人员释放与这些变量相关的内存。
怎么做?在C语言中,你会直接使用 free(str) 释放变量。
带有垃圾收集器的语言(如Ruby、Python、Java、JavaScript、c#、Go)能够跟踪这些垃圾,并在它们不再被使用时释放它们。垃圾收集增加了开销,但它也消除了许多破坏性的bug。
代码时间
让我们通过创建一个简单的程序并学习如何编译和执行它来开始我们的旅程。打开你最喜爱的文本编辑器,并编写以下代码:
package main
func main() {
println("Hello World!")
}
保存上述文件为 main.go。现在,你可以把它保存在任何你想要的地方。
接下来,打开shell/命令提示符,并将目录切换到保存文件的位置。类似于
cd ~/code
这样就切换到工作目录了。然后执行新建的go程序文件:
go run main.go
如果一切正常就会看到命令行的输出了 Hello World!。这就证明环境什么的都好了,可以开始畅快地使用了。
在开发时,可以使用go run或go build。部署代码时,我们会把代码执行 go build 编译为二进制文件放在服务器执行。
说说main函数
就行C语言中,main函数是一切程序的入口,go语言也是一样的。上一节中的代码希望大家可以理解, 我们使用内置函数 println 输出了一个字符串,仅此而已。go语言唯一的入口就是在 main 包下的 main 函数。
关于package我们下一节讲解。我们把目光集中在main函数上,我们编写代码的时候,为了图方便省事, 直接在main函数内写代码了,没有拆分,数据结构体等等这些。
举一些例子:
package main
import "fmt"
func main() {
var a [5]int
fmt.Println("emp:", a)
a[4] = 100
fmt.Println("set:", a)
fmt.Println("get:", a[4])
fmt.Println("len:", len(a))
}
如果你愿意,你可以更改代码并更改包名。通过go Run运行代码,你大概率会得到一个错误。
然后,那就名称更改为main,但使用别的函数名。你应该会看到一个不同的错误消息。尝试做同样的更改,但使用go build代替。
注意,代码是需要编译的,只是没有运行它的入口点。例如,在构建库(library)时,这是非常正常的。
写在最后
本文初步介绍了垃圾回收的必要性,还有main包,main函数的概念。
Happy coding :-)
我是@程序员小助手,持续分享编程知识,欢迎关注。
- CaseStudy(showcase)数据篇-加载图片
- CaseStudy(showcase)数据篇-从XML中获取数据
- CaseStudy(showcase)布局篇-全屏效果
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
- No.3 啥是数据运营(三):思维方式
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
- MySQL数据同步【双主热备】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SQL中CASE表达式的妙用
- 2w 字 + 40 张图带你参透并发编程!
- RSA 敏感数据加解密方案
- 极客算法训练笔记(一),算法学习方法篇
- 链表:听说用虚拟头节点会方便很多?
- 从JVM设计者的角度来看.class文件结构,一文弄懂.class文件的身份地位
- 抓包分析UDP,TCP和UDP的区别说不上五条就进来看看吧
- 学习|C#线程中AutoResetEvent的使用
- Httprouter—用go实现的高性能路由器
- Django-python最流行的web框架
- C++ 类的不同构造与三种引用
- C++继承、虚函数、RTTI、友元类、异常处理
- C++基本语法
- 抓包分析TCP三次握手四次挥手全过程,教你观看“多包运动”的正确姿势
- 抓包分析以太网帧和IP数据包,头部那么多东东用来干啥的,扫盲篇