go手工引入包注意事项

本项目只是检测一些自建的包的引用关系需要注意的事项。
并没有引用第三方的包也没有进行依赖管理等。
testpackage项目目录文件结构:
C:\Program Files\Go\src\testpackage>tree /f
文件夹 PATH 列表
卷序列号为 3AE9-D7D1
C:.
│  go.mod
│  main.go
├─imp   //imp是包名
│       add.go   //定义Gadd函数被main.go引用
│       sub.go   //定义sub函数,作用是内部调用,不对外
└─internelimp
        interl.go  //定义Intelfunc函数被imp包内的Gadd函数引用

main.go(主程序)

package main

import (
    "fmt"
    "testpackage/imp"
)
/*
1.Go语言中不允许导入包而不使用
2.Go语言中不允许循环导入包
3.需要注意引用其他包的函数的首字母要大写.
4.代码放在$GOPATH/src目录下的话,导入包的路径是从$GOPATH/src+项目名称 
  这里项目名称为testpackage,包引入imp
5.引入的包内文件(库源文件)不能包含main函数
6.关于命令源文件:
  如果一个 Go 源文件被声明属于 main 包,并且该文件中包含 main 函数,则它就是命令源码文件。
  命令源文件属于程序的入口,可以通过Go语言的go run命令运行或者通过go build命令生成可执行文件。
7.库源文件:库源文件则是指存在于某个包中的普通源文件,并且库源文件中不包含 main 函数。

*/
//init函数用来做一些初始化工作的
func init() {
    fmt.Println("-----main执行初始化工作-----")
}

func main() {
    fmt.Println("-----main执行开始------------------------------")
    ret := imp.Gadd(10, 20)
    fmt.Println(ret)
     //输出imp包内声明的变量Name
    fmt.Println(imp.Neaning)
    fmt.Println("----main执行成功,生成可执行文件-----------------")
}

  imp/add.go

package imp

import (
    //导入包规则: $GOPAH/src/项目名称/+引用目录
    "testpackage/internelimp"
    "fmt"
)
/*
1、标识符首字母大写标识对外可见
2、通常不对外的标识符都是要首字母小写
*/
var Neaning = "我是imp包的变量Neaning-------"

//首字母大写,别的包调用的话 
func Gadd(a, b int) int {
        fmt.Println("----Gadd函数调用internelimp包开始-----")
        //internelimp包内的Inelfunc函数 internelimp.Intelfunc() fmt.Println(
"----Gadd函数调用internelimp包结束-----") return a + b } /* 说明 1.init函数在包导入的时候自动执行 2.init函数没有参数也没有返回值 */ func init() { fmt.Println("---初始化Gadd函数开始 init----")
//同一个包内,内部引用,所以用小写,也不用加包名. su :
= sub(50, 40) fmt.Println(su) //-10 fmt.Println("---初始化Gadd函数结束 init----") //fmt.Println(Neaning) }

 imp/sub.go

package imp
import (
    "fmt"
)
//内部引用,若首字母为小写,则对外不可见
func sub(x, y int) int {
    fmt.Println("----我是sub,Gadd函数在调用我-----")
    ret := x -y
    return ret
}

C:\Program Files\Go\src\testpackage\internelimp\interl.go

package internelimp

import "fmt"

//被其他包引用,首字母需大写
func Intelfunc() {
    fmt.Println("---Intelfunc函数被调用---")

}
func init() {

    fmt.Println("internelimp --------init()-----")
}

 

posted @ 2022-06-02 22:14  jinzi  阅读(6)  评论(0编辑  收藏  举报