不一样的go语言之入门篇-Hello World
这是《不一样的go语言》的开篇之作,我尝试以java语言转变者的角度来聊一聊go语言。所以今天先从go语言的基础开始,即语法。
学习一门新的编程语言,必从语法开始。但需要注意的是,对于一个有大量项目经验的程序员来说,可能看完语言介绍或者看完Hello World之后,就着急地想着上手写个小东东玩玩,比如写个简单的web服务。但是将一门新的语言应用到实际项目中需要的东西很多很多。诸如go语言的项目结构是怎么样的?有没有什么约定?用什么IDE?依赖是怎么管理的?项目是怎么构建的?是怎么发布的?如果带着这么多的思想负担去学习一门新语言,这个时间花费恐怕会得不偿失。
因而我觉得回归本真最好不过。回到C语言的时代,面向过程、面向单文件编程。所以的代码放在一个文件里,使用命令行编译、运行。
接下来的示例,就是go语言版的Hello World。新建文件main.go
[eventer@localhost]# vi main.go
然后敲入以下代码:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
要编译、运行这段代码,需要安装go sdk。伟大的先驱者们,已经为我们开辟了绿色通道。sdk及官方文档都可以在go 语言中文网找到,目前go语言的最新版本是1.11。
一个题外话,go语言从1.5版本开始实现自举(Bootstrap,用要编译的目标编程语言编写其编译器或汇编器),也就是用go语言写编译器,然后用来编译go语言写的代码。因此当你需要从go1.5的源码来构建go sdk的话,需要先下载安装go1.4或者使用gcc构建go1.4的源码,当你有go1.4的go编译器的时候,就可以用它来编译go1.5的源码,从而得到go语言版的编译器。
go sdk: 下载链接
下载安装之后,设置GOROOT环境变量为go sdk所在目录,然后设置一个工作目录的环境变量GOPATH,用于存放未来要用到第三方包及你的程序。
至此,你可以使用以下命令编译、运行上面那段代码了。
[eventer@localhost]# go run main.go
波澜不惊,可是一个Hello World 能看出什么来呢?那还是让我们来看看各大语言的 Hello World 是长什么样的吧。
Java版
package com.eventer.test;
import java.lang;
public class Test {
public static void main(String[] args) {
System.out.Println("Hello World!");
}
}
Python版
print "Hello World!\n";
C语言版
#include <stdio.h>
void main() {
printf("Hello World!\n");
}
C++版
#include <iostream>
void main() {
using namespace std;
cout << "Hello World!\n";
}
nodejs版
console.log('Hello World!');
C#版
using System;
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
Common Lisp 版
(print "Hello World");
Lua 版
print "Hello World!/n"
从这么来看,go没有更简洁也没有更复杂。所以确实从一个 Hello World 来看一门语言,真的看不出什么来。当然设计一门语言也不是从 Hello World 来开始设计的。可以得出结论,Hello World只是为了让你觉得写个 Hello World挺简单的,赶快麻利地搭建环境吧。
下一篇将详细地讲述go语言更多地语法。
参考文献
请关注公众号

不一样的go语言之入门篇-Hello World的更多相关文章
- go语言学习入门篇 2--轻量级线程的实现
很多有过 JVM 相关语言工作经验的程序员或许都遇到过如下问题: 超出 thread 限制导致内存溢出.在作者的笔记本的 linux 上运行,这种情况一般发生在创建了 11500 个左右的 threa ...
- survival analysis 生存分析与R 语言示例 入门篇
原创博客,未经允许,不得转载. 生存分析,survival analysis,顾名思义是用来研究个体的存活概率与时间的关系.例如研究病人感染了病毒后,多长时间会死亡:工作的机器多长时间会发生崩溃等. ...
- go语言学习入门篇 3-- 程序执行流程
先看下 Go 语言的程序结构: package main // 当前包名 import "fmt" // 导入程序中使用到的包 // 初始化函数 func init() { // ...
- go语言学习入门篇1---go语言的主要特性与发展
1.1 影响 Go 语言发展的早期编程语言 正如 "21 世纪的 C 语言" 这句话所说,Go 语言并不是凭空而造的,而是和 C++.Java 和 C# 一样属于 C 系.不仅如此 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- c语言快速入门3
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 c语言快速入门2 3.4.1 字符和字符串 字符:'' 单个 ...
- c语言快速入门2
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- Unity3D大风暴之入门篇(海量教学视频版)
智画互动开发团队 编 ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...
随机推荐
- js 组件化
我的github样例:https://github.com/hzijone/javascript_module js 用对象的方式实现组件化. 1.对一个对象里增加方法的方式: 把模块的变量传给函数, ...
- 2018-2019-2 网络对抗技术 20165320 Exp1 PC平台逆向破解
学到的新知识总结 管道:符号为| 前一个进程的输出直接作为后一个进程的输入 输出重定向:符号为> 将内容定向输入到文件中 perl:一门解释性语言,不需要预编译,直接在命令行中使用.常与输出重定 ...
- Debian 9 源配置
Debian 9: deb http://mirrors.163.com/debian/ stretch main non-free contrib deb http://mirrors.163.co ...
- LaTeX 对齐问题
一.一行文本对齐 \leftline{左对齐} \centerline{居中} \rightline{右对齐} 二.多行文本或段落对齐 左对齐 \begin{flushleft}...\end{flu ...
- C++学习4-面向对象编程基础(面向对象概念,定义类,定义对象)
什么是面向对象? 在软件的设计过程中的两种方式: 把程序按照算法的执行步骤来拆解,一步步实现,这是面向过程编程: 把程序按照现实世界的理解,分成不同对象,通过多个对象之间的相互作用,来完成程序的最终功 ...
- arch linux 安装指南
(如果不想折腾arch linux,推荐直接使用 manjaro: https://manjaro.org/ ) 1.安装准备 Arch Linux 能在任何内存空间不小于 512MB 的 x86_ ...
- Python3学习笔记07-List
Python有6个序列的内置类型,但最常见的是列表和元 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 创建一个列表, ...
- zabbix3.0.4导入中文模板后乱码问题处理
通过yum安装方式部署了zabbix3.0.4监控服务器,配置过程中发现当导入的模板中有中文时,图中的中文会变成方块 如下图所示: 这个问题是由于zabbix的web端没有中文字库,我们最需要把中文字 ...
- 14-jQuery补充
jquery内容补充 jquery除了咱们上面讲解的常用知识点之外,还有jquery 插件.jqueryUI知识点 jqueryUI 官网: https://jqueryui.com/ jqueryU ...
- Ex 6_5棋子放置问题_第八次作业
题目貌似有问题 (b) 子问题定义: 设maxValue[i][j]为棋盘的前i行中最后一行为i时第i行按照第j种放置方式放置时得到的最大覆盖值,comp[i][j]为第i种放置方式与第j种放置方式是 ...