#2.1 你好,GO

在我们开始用GO写应用之前，我们先从最基本的程序开始。就像你造房子之前你不知道什么是地基一样，因此，在本小节中，我们要学习用最基本的语法让GO程序运行起来。

##程序

这就像一个传统，学习所有的语言，你应该学习编写的第一个程序就是如何输出`hello world`

准备好了吗？Let's GO

	package main

	import "fmt"

	func main() {
    	fmt.Printf("Hello, world; καλημ ́ρα κóσμ or こんにちは世界\n")
	}
	
输出如下：
	
	Hello, world; καλημ ́ρα κóσμ or こんにちは世界	

##详解
首先我们要了解一个概念，Go程序是通过`package`来组织的

`package <plaplapla>`（在我们的例子里面，plaplapla是main）这一句话是告诉我们当前这个文件属于那个包，而main包是告诉我们当前这个包是一个独立可运行的包，编译之后是可执行文件，除了main之外，其他的包最后生成的都是放在"$GOPATH/pkg/系统_架构“（以mac为例：darwin_amd64)下面的.a文件(也就是包文件)。

>每一个GO的独立可运行的应用程序，必定包含有一个`package main`，这个main包里面必定包含有一个入口函数main函数，这个函数没有任何的参数，也没有的返回值

为了打印"Hello,world..."，我们调用了一个函数Printf，这个函数来自于fmt这个包，所以我们在第三行里面导入了系统级别的fmt包，`import "fmt"`

包的概念和python的modules是同一个理念，都是有一些特有的好处：模块化(能够把你的程序分成多个模块)和重用性(每个模块都能被其他应用程序反复使用)，这里我们只要先了解一下包的概念，后面我们将会开始编写自己的包

第五行，我们定义了一个main函数,我们通过func这个关键字，他的内容通过`{`和`}`组织，就和我们平常写的c、c++、Java一样

大家可以看到main函数是没有任何的参数的，但是我们接下来学习如何编写函数里面，函数是可以带参数的，而且可以不返回数据，返回一个或者多个数据

第六行，我们调用了fmt包里面定义的函数Printf，大家可以看到，这个函数的调用是通过`<package name>.function`的方式调用的，这个和python是十分相似的

（注：前面提到过，包名和包所在文件夹名可以是不同的，此处的package name即为通过`package <plaplapla>`声明的包名，而非文件夹名。）

最后大家可以看到我们输出的内容里面包含了很多非ASCII码的字符，实际上，GO是天生支持UTF-8的，任何的语言都可以直接输出


##结论

GO使用package（和Python的模块类似）来组织代码。main.main函数(这个函数主要位于主包）是每一个独立的可运行程序的入口点。GO使用UTF-8字符串和标识符(因为UTF-8的发明者也就是GO的发明者)，所以它天生就具有多语言的支持。

## links
   * [目录](<preface.md>)
   * 上一章: [GO语言基础](<2.md>)
   * 下一节: [GO基础](<2.2.md>)

## LastModified 
   * $Id$
