简单地理解就是一组源码看做一个包,这些源码都放在一个目录下,可以被其他文件调用。每个包都对应一个独立的名字空间,这样看是不是有点像命名空间?

  • 文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
  • 文件夹名与包名没有直接关系,并非需要一致。
  • 同一个文件夹下的文件只能有一个包名,否则编译报错。
  • 同一个文件夹下(同一个包)互相调用函数不用引用包。(本质上可以看做是一个文件)

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

  • public: ⾸字母⼤写,可被包外访问
  • private: ⾸字母⼩写,仅包内成员可以访问

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

比如:
目录结构

- my_go
    - myLib
        - func.go
        - func2.go  
    - hello.go 

func.go

//故意和文件夹名和文件名都不一样,但是更推荐保持一致
package myLib2

//公有的
func Add(x,y int) int {
    return x + y
}
//私有的
func add(x,y int) int {
    return x + y
}

func2.go

//必须保持一致,一个文件夹里面的报名要一样
package myLib2

func Sub(x,y int) int {
    a := add(x,y) //同一包名下可以直接用,公有私有都可以
    println(a)
    return x - y
}

hello.go

package main //包名

//fmt 包实现了格式化 IO(输入/输出)
// import 倒入的其实是文件名,不是包名
import (
    "./myLib"
    "fmt"
)

func main() {
    //go里面的全局函数要首字母大写
    fmt.Println(myLib2.Add(1,1))  //使用的是包名
    fmt.Println(myLib2.Sub(1,1))
    //fmt.Println(myLib2.add(1,1)) //私有的不能用
}

包的引用方式

//忽略此包,为了只使用其init函数
import _ "fmt"

func main() {

}

//推荐
import (
    "fmt"
    "os"
)

/* 最好不要用,虽然可以简化编码,但是会不好阅读
//给包名起别名
import io "fmt"

func main() {
    io.Println("this is a test")
}
*/

/*  请忘记这个方式,别用
//.操作
import . "fmt" //调用函数,无需通过包名
import . "os"

func main() {
    Println("this is a test")
    Println("os.Args = ", Args)
}
*/

init函数和main函数

main函数就是程序入口,必须有,其所在的包就是main包,它所在的目录名或文件名也是可执行文件的文件名。
init函数也就是初始化函数或者叫构造函数。会在函数执行前执行。
比如引入顺序A包(main包)–>B包–>C包–>D包,就会先执行D的init函数,再执行D的代码,最后执行main的init函数和main函数。

goPath

Go语言要求我们将一个工程放在叫GoPath的地方,里面包含3个子目录:src目录、pkg目录和bin目录。

  • src目录:用于以代码包的形式组织并保存Go源码文件。(比如:.go .c .h .s等)
  • pkg目录:用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。
  • bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。

go install 命令,用于编译整个工程,编译前必须要设置好goPath和GoBin。
go env 命令,查看当前的go环境,里面就有goPath

比如:
项目目录 E:mycodemy_go

在这里插入图片描述

这里的goPath是全局的,每个项目还有个自己的,在编辑器里面配置,如果只有一个项目,可以把这个改成项目目录。

在这里插入图片描述

在windowsPowerShell里面打印

在编辑器里面打印

在这里插入图片描述

生成前:

在这里插入图片描述

此时在windowsPowerShell里面执行 go install ,则会生成目录和可执行文件:

在这里插入图片描述

文章来源于互联网,如有雷同请联系站长删除:Go语言学习笔记09.工程管理

发表评论