# 2、Go目录结构及包管理



### 一、项目结构

一个Go语言项目的目录一般包含以下三个子目录：

* src 目录：放置项目和库的源文件；
* pkg 目录：放置编译后生成的包/库的归档文件；
* bin 目录：放置编译后生成的可执行文件。

```go
workspace
    |
    +--- bin // go install 安装目录。
    |      |
    |       +--- learn
    |
    |
    +--- pkg // go build ⽣成静态库 (.a) 存放目录。
    |       |
    |      +--- darwin_amd64
    |             |
    |             +--- mylib.a
    |                     |
    |                     +--- mylib
    |                         |
    |                         +--- sublib.a
    |
    +--- src // 项目源码目录。
          |
          +--- learn
          |      |
          |      +--- main.go
          |
          |
          +--- mylib
                 |
                 +--- mylib.go
                 |
                 +--- sublib
                        |
                        +--- sublib.g
```

### 二、main 包

* 所有用 Go 语言编译的可执行程序都必须有一个名叫 main 的包。 go语言的编译器会将这种名字的包编译为二进制可执行文件。
* main包下肯定会有名为main()的函数，main()是程序的入口。
* 编译完会使用声明 main 包的代码所在的目录的目录名作为二进制可执行文件的文件名

### 三、导包

```go
package main

import (
    . "fmt"  // 简洁模式导入
    _ "fmt"  // 非导入模式：仅让该包执行初始化函数
    io "fmt" // 别名模式导入
)

func main() {
    Println("Hello Go!")
    io.Println("Hello Go!")
}
```
