golang学习系列——6. hello world

目录

1. 代码基本结构

hello world

2. package 以及 import

包(package)

标准库

编译

导入(import)

可见性


1. 代码基本结构

Go 程序的执行(程序启动)顺序如下:

  1. 按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程:
  2. 如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次。
  3. 然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数。
  4. main 也执行同样的过程(初始化常量变量,调用init函数),最后调用 main 函数开始执行程序。
//包声明
package [pkg]

//导入其他包
import (
    [pkg1]
    [pkg2]
    ...
)

//类型声明
type (
    [t1 type1]
    [t2 type2]
    ...
)

//常量声明
const (
    [const1 = value1]
    [const2 = value2]
    ...
)

//变量声明
var (
    [name1 type1]
    [name2 type2]
    ...
)

//函数定义
func func1() {
    //todo
}

hello world

package main

import "fmt"

func main() {
	fmt.Println("hello, world")
}

2. package 以及 import

包(package)

go用来结构化代码的一种方式,可参考其他语言中的类库或命名空间的概念。

每个程序都由包组成,可以使用自身包或者从导入其它包中的内容。
每个 .go 文件都属于且仅属于一个包,一个包可以包含多个 .go 文件

1. 所有的包名都应该使用小写字母。
2. 必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。
3. package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包

标准库

在 Go 的安装文件里包含了一些可以直接使用的包(标准库),标准库一般存放在 $GOROOT/pkg/$GOOS_$GOARCH/ 目录下。

编译

1. 包是编译的最小单元,因此根据惯例,每个目录都只包含一个包。
2. 如果对一个包进行更改或重新编译,所有引用了这个包的客户端程序都必须全部重新编译。

Go 中的包模型采用了显式依赖关系的机制来达到快速编译的目的,编译器会从后缀名为 .o 的对象文件(需要且只需要这个文件)中提取传递依赖类型的信息。每一段代码只会被编译一次

如果 A.go 依赖 B.go,而 B.go 又依赖 C.go

  • 编译 C.goB.go, 然后是 A.go.
  • 为了编译 A.go, 编译器读取的是 B.o 而不是 C.o.

这种机制对于编译大型的项目时可以显著地提升编译速度。

导入(import)

一个 Go 程序是通过 import 关键字将一组包链接在一起。

import (
   "fmt"
   "os"
)

导入的包以 . 或 / 开头可以指定路径(相对路径/绝对路径),否则会在全局文件进行查找。
可参考 c/c++ 的头文件引用  #include <header.h>  #include "header.h"

可见性

当标识符(包括常量、变量、类型、函数名、结构字段等等)以大写字母开头,可以被导出(对包外部可见:参考其他面向对象的 public 属性), 否则不可以被导出(对包外部不可见:参考其他面向对象的 private 属性)

在包内部声明的标识符(包括常量、变量、类型、函数名、结构字段等等)在包内部是可见的,即使不是在同一个文件中。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值