1、包简述

  GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包。比如 import "logging" 则会在所有设置的 $GOPATH/src 下去寻找相应包,而不仅仅是当前项目中。

2、包声明

  在每一个代码文件中,都需要使用 package 命令来声明包名,所以在GO语言中,代码文件属于哪个包与文件目录结构没有必然联系,但习惯上我们会设置成跟目录结构相同。带来的问题就是当想修改文件夹名的时候,会想去修改该文件夹中所有代码中的声明的包名。

  注意,命令源码文件,即 main 函数所在的包,必须声明为 main 包,main 包中要求有且仅有一个命令源码文件。

3、包导入

  通过 import 命令来导入包,查找的范围就是简述里说的 $GOPATH/src 定义的路径。代码中使用某外包的函数时,需要使用 "最后一个包名.函数名" 的方式,所以如果导入如下情况时,在使用上就会出现问题:

import (
"json"
"my/json"
)

  那我们需要给包名起个不同的别名,如:

import (
. "json"
myjson "my/json"
)

  这样就可以使用 myjson.function() 来调用 my/json 中的函数,而别名为 . 时,表示可以不使用包名前缀直接使用包中的函数,如 json 包里有一个 to_json() ,则可以直接使用。

  注意,从这里也可以看出来,同一个包中的不同代码文件,其函数名是不能重复的。

  可以下载一个插件,自动引入或删除import:go get golang.org/x/tools/cmd/goimports

4、包初始化

  GO语言编译非常严格,如果引入一个包,却没有使用它,就会编译报错。但在开发调试过程中,这样就会显得非常麻烦,我们可以在将导入包重命名为 _,就可以使编译通过。其实,该做法的意义在于初始化该包,执行该包中的 init() 方法。比如我们封装了一个DB操作,我们可以把连接数据库的操作放在 init 函数中,然后在启动服务的代码文件中通过 _ 的方法引入该包,就可以自动执行其 init 函数,且通过编译了。

  注意,如果包中的多个代码文件都有 init 函数,则都会执行,但执行顺序是不可预期的。

5、包访问权限

  包里定义的方法,如果首字母是小写,则表示是包内私有的,如果首字母是大写,就可以在其它包中被访问

6、非标准包

  golang.org/x/... 目录下存储了一些由Go团队设计、维护,对网络编程、国际化文件处理、移动平台、图像处理、加密解密、开发者工具提供支持的扩展包。未将这些扩展包加入到标准库原因有二,一是部分包仍在开发中,二是对大多数Go语言的开发者而言,扩展包提供的功能很少被使用。

go 学习 ---package的更多相关文章

  1. node学习: package.json

    package.json 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据) 1.创建 package.json npm init npm init –yes 2.p ...

  2. 13 vue学习 package.json

    一:package.json文件详解 管理你本地安装的npm包 .定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件,自动 ...

  3. [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. 在包a中编写一个类Father,具有属性:年龄(私有)、姓名(公有); 具有功能:工作(公有)、开车(公有)。 在包a中编写一个子类Son,具有属性:年龄(受保护的)、姓名; 具有功能:玩(私有)、学习(公有)。 最后在包b中编写主类Test,在主类的main方法中测试类Father与类Son。

    package a; public class Father { public String name; private int age; public Father(String name) { t ...

  5. 在LinearLayout中实现列表,列表采用LinearLayout横向布局-android学习

    不多讲直接上代码 1.Activity 对应的布局文件如下: <?xml version="1.0" encoding="utf-8"?> < ...

  6. go语言 http学习

    net/http库学习 概念 处理器 处理器:拥有ServeHTTP方法的接口(任何类型) 签名:ServeHTTP(http.ResponseWriter, *http.Request) Respo ...

  7. Java学习笔记54(反射详解)

    反射概念: java反射机制是在运行状态中,对于任意一个类,都能知道所有属性和方法 对于任意一个对象都能调用它的任意一个方法和属性,这种动态获取和调用的功能称为java的反射机制 实际作用: 已经完成 ...

  8. Java学习---程序设计_面试题[2]

    百度2017春招笔试真题编程题集合之买帽子 // 2017-10-09 // 题目描述 // 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同.度度熊想买一顶价格第三便宜的帽子,问第 ...

  9. 课程上线 -“新手入门 : Windows Phone 8.1 开发”

    经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...

随机推荐

  1. 如何使用Windows Library文件进行持久化

    前言 想象一下,假设在你不知道的情况下,攻击者在你的计算机上放置了一个恶意文件.每当你访问桌面上某个文件夹时(例如Documents文件夹),都会执行一次该文件.这样的场景,通过利用一种鲜为人知的持久 ...

  2. 眼前一亮!十八款新潮而又独特的网站Header设计

    一个网站最重要的一个部分就是标题.这将是访问者的第一印象,设计出一个吸引眼球并且功能清晰导航还是比较容易的,但想出一个独特的header却总是困难的,这就是为什么我决定把那些对我有最影响的导航列出来了 ...

  3. 《House of Cards》观后感

    <House of Cards>,首先我得说好看,36个赞,比我以前看的那些美剧都要好看,虽然我是个屌丝程序员,但是我还是希望我自己看书不只看专业的书那种,虽然我是个屌丝程序员,工科男,所 ...

  4. MATLAB数据处理快速学习教程

    转自:http://blog.csdn.net/abcjennifer/article/details/7706581 本篇内容集合了MATLAB中的基本操作.数据存储与计算.数据的直线与曲线拟合与画 ...

  5. STL - 容器 - Array

    Array是C++ 11给STL新增加的容器 ArrayTest.cpp #include <array> #include <algorithm> #include < ...

  6. 能说明你的Javascript技术很烂的五个原因

    Javascript在互联网上名声很臭,但你又很难再找到一个像它这样如此动态.如此被广泛使用.如此根植于我们的生活中的另外一种语言.它的低学习门槛让很多人都称它为学前脚本语言,它另外一个让人嘲笑的东西 ...

  7. PHP-7

    PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍. PHP 7+ 版本新加特性如下表所示: 序号 内容 1 PHP 标量类型与返回值类型声明 ...

  8. Struts2(二)action的三种方式

    一.普通java类 package com.pb.web.action; /* * 创建普通的java类 */ public class HelloAction1 { public String ex ...

  9. EventBus源码分析

      一.         EventBus简介 1.1.EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化Android 事件传递,这里的事件可 ...

  10. Statusbar

    Main window The QtGui.QMainWindow class provides a main application window. This enables to create a ...