《Go语言实战》笔记之第三章 ----包
原文地址:
http://www.niu12.com/article/10
####包
所有的.go 文件,除了空行和注释,都应该在第一行声明自己所属的包。
每个包都在一个单独的目录里。 不能把多个包放到同一个目录中,
也不能把同一个包的文件分拆到多个不同目录中。
这意味着,同一个目录下的所有.go 文件必须声明同一个包名。
并不需要所有包的名字都与别的包不同, 因为导入包时是使用全路径的,
所以可以区分同名的不同包
包被导入后会使用你的包名作为默认的名字,
不过这个导入后的名字可以修改。
这个特性在需要导入不同目录的同名包时很有用
import 语句告诉编译器到磁盘的哪里去找想要导入的包
eg:import f1 path1/file
eg:import f2 path2/file
import (
f1 path1/file
f2 path2/file
)
一旦编译器找到一个满足 import 语句的包,就停止进一步查找。
有一件重要的事需要记住,编译器会首先查找 Go 的安装目录,
然后才会按顺序查找 GOPATH 变量里列出的目录。
所有导入的包必须被使用,户可能需要导入一个包,但是不需要引用这个包的标识符。
在这种情况,可以使用空白标识符_来重命名这个导入,但是会执行该包的init()
main 包:Go 语言的编译程序会试图把这种名字的包编译为二进制可执行文件。
所有用 Go 语言编译的可执行程序都必须有一个名叫 main 的包。
当编译器发现某个包的名字为 main 时,
它一定也会发现名为 main()的函数, 否则不会创建可执行文件。
main()函数是程序的入口,所以,如果没有这个函数,程序就没有办法开始执行。
程序编译时,会使用声明 main 包的代码所在的目录的目录名作为二进制可执行文件的文件名。
最佳实践:
包名的惯例是使用包所在目录的名字,
应该使用简洁、清晰且全小写的名字,这有利于开发时频繁输入包名
####init函数
每个包可以包含任意多个init(),这些函数都会在程序执行开始的时候被调用
所有被编译器发现的 init 函数都会安排在 main 函数之前执行。
init()用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作
不能导入不使用的包,为此使用空白标识符重命名这个导入可以让 init
函数发现并被调度运行,让编译器不会因为包未被使用而产生错误
多个包的init的函数执行顺序与栈执行顺序一致:先进后出,先导后执行
####Go命令
go build . 命令会执行编译整个项目
go build fileName 命令会执行编译单个文件
go clean . 删除编译生成的可执行文件
go vet main.go 检测代码的常见错误
go fmt main.go 格式化代码
《Go语言实战》笔记之第三章 ----包的更多相关文章
- java并发编程实战笔记---(第三章)对象的共享
3.1 可见性 synchronized 不仅实现了原子性操作或者确定了临界区,而且确保内存可见性. *****必须在同步中才能保证:当一个线程修改了对象状态之后,另一个线程可以看到发生的状态变化. ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换 学习目标 理解如何用矩阵表示线性变换和仿射变换: 学习在 ...
- 《Go语言圣经》阅读笔记:第三章基础数据类型
第三章 基础数据类型 Go语言将数据类型分为四类: 基础类型 数字 整数 浮点数 复数 字符串 布尔 复合类型 数据 结构体 引用类型 指针 切片 字典 函数 通道 接口类型 在此章节中先介绍基础类型 ...
- Kafka 权威指南阅读笔记(第三章,第四章)
Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...
- Java语言程序设计(基础篇) 第三章 选择
第三章 选择 3.8 计算身体质量指数 package com.chapter3; import java.util.Scanner; public class ComputeAndInterpret ...
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...
- JavaScript DOM编程艺术-学习笔记(第三章、第四章)
第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯 ...
- 《深入理解Java虚拟机》读书笔记(第三章)
垃圾收集器与内存分配策略(第三章) 前言,众所周知,Java是由c++进化而来,c++在内存需自己申请,自己释放,于是就有了Java的动态内存分配.书的第三章开篇,有这样一句话描述的很妙——Java与 ...
- Linux内核分析 读书笔记 (第三章)
第三章 进程管理 3.1 进程 1.进程: 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程:执行 ...
随机推荐
- MySQL的读写分离---主从复制、主主复制
1.复制是基于BinLog日志 存在三种日志格式:Statement:存储Sql语句,存储日志量是最小的.有可能复制不一致Row:存储event数据,存储日志量大,但是不能很直接进行读取:Mixed: ...
- C++11空指针: nullptr
参考[C++11]新特性--引入nullptr NULL 在C++中, 经常会用到空指针, 一般用NULL表示空指针, 但是NULL却是这样定义的 #ifndef NULL #ifdef __cplu ...
- 不断学习UI框架的写法
在web开发的过程中,我们会需要用到很多大大小小的插件,比如文本框,下拉树,下拉框等等各种各样的都需要.或许在开发的网页中会用到同一种插件来满足各种各样复杂的业务逻辑,比如简单的一个下拉树,有的地方需 ...
- Spring学习(一)——Spring中的依赖注入简介
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...
- [水煮 ASP.NET Web API2 方法论](1-8)添加 Session 状态
问题 ASP.NET Web API 构建 Web 应用程序时,要求使用 Session 在服务器存储一些用户特定的信息 解决方案 ASP.NET Web API 不支持 Session,因为 API ...
- 自建yum源(只演示nginx服务,其它都一样)
(1)概述 (2)yum server端配置 1)关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld sed -ri ...
- PyInstaller:把你的Python转为Exe
把Python程序转为可执行的EXE文件,之前已经介绍过,像py2exe,bbfreeze. 以我自己使用的经历来看,这两款都还不错,比较适合简单的Python程序,如果你加载的第三方类库比较多的话, ...
- [onethink ucenter] 跨域名单点登录关键点
1.uc_client/data/cache/apps.php <?php $_CACHE['apps'] = array ( 1 => array ( 'appid' => '1' ...
- Java工具类-格式化日期
package common; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; p ...
- 洛谷P4609 [FJOI2016]建筑师(第一类斯特林数+组合数)
题面 洛谷 题解 (图片来源于网络,侵删) 以最高的柱子\(n\)为分界线,我们将左边的一个柱子和它右边的省略号看作一个圆排列,右边的一个柱子和它左边的省略号看作一个圆排列,于是,除了中间的最高的柱子 ...