Go中的工程管理

ck_god · · 1670 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


一、工作区:

其实就是一个对应于特定工程的目录,它应包含3个子目录:src目录、pkg目录和bin目录。

src目录:用于以代码包的形式组织并保存Go源码文件。(比如:.go .c .h .s等)

pkg目录:用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。

bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。

若环境变量GOPATH中包含多个工作区的目录路径,像这样执行go install命令就会失效,此时必须设置环境变量GOBIN


二、包:


我们创建的的自定义包最好放在GOPATHsrc目录下(或者GOPATH src的某个子目录)。

Go语言中,代码包中的源码文件名可以是任意的。但是,这些任意名称的源码文件都必须以包声明语句作为文件中的第一行,每个包都对应一个独立的名字空间。

package calc

包中成员以名称⾸字母⼤⼩写决定访问权限:

public: ⾸字母⼤写,可被包外访问

private: ⾸字母⼩写,仅包内成员可以访问


注意:同一个目录下不能定义不同的package

三、main包。

init函数(能够应用于所有的package),建议用户在一个package中每个文件只写一个init函数

main函数(只能应用于package main),package main就必须包含一个main函数.


行顺序

1)每个包可以包含任意多个 init 函数,这些函数都会在程序执行开始的时候被调用。所有被编译器发现的 init 函数都会安排在 main 函数之前执行。init 函数用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作。

2)程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。

3)有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。

4)当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变进行初始化,接着执行init函数(如果有的话),依次类推。

5)等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。

图片1.png

四,导入包使用关键字import。

一)、import可以是相对路径,也可以是绝对路径。

//方法1

import  "fmt"

import "net"


//方法2

import (

    "fmt"

    "net"

)

二)、包的查找路径。

 1)标准库中的包会在安装 Go 的位置找到; 2) Go开发者创建的包会在GOPATH环境变量指定目录里查找。

 3)如果编译器查遍 GOPATH 也没有找到要导入的包,那么在试图对程序执行 run 或者 build

  的时候就会出错。


三)点操作,别名操作和_操作。

1)点操作:

import (

    //这个点操作的含义是这个包导入之后在你调用这个包的函数时,可以省略前缀的包名

     . "fmt"

)


func main(){

    Println("Hello go!")

}

2)别名操作

import (

    io "fmt" //fmt改为io

)

func  main(){

    io.Println("hello go") //通过io别名调用

}

3)_操作

import (

    _"fmt"

_操作其实是引入改包,而不直接使用包里面的函数, 而是调用了该包里面的init函数。








有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:ck_god

查看原文:Go中的工程管理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1670 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传