源文件和库文件放在同一文件夹下
同一个目录下的源码文件都应被声明属于同一个代码包。
源码文件声明的包名可以于其所在目录的名称不同,只要这些文件声明的包名一致就可以了。
demo.go
package main
import (
"flag" // 接收和解析命令参数
)
var name string
func init(){
/*
第 1 个参数为存储改命令参数值的地址
第 2 个参数指定命令参数的名称
第 3 个参数指定在未追加该命令参数时的默认值
第 4 个参数为该命令参数的简短说明,打印命令时用到
*/
flag.StringVar(&name, "name", "everyone", "The greeting object.");
}
// 根据运行程序时给定的参数问候某人
func main(){
flag.Parse() // 解析命令参数
hello(name)
}
demo_lib.go
package main // 同目录下源码文件的代码包声明一致
import "fmt"
func hello(name string){
fmt.Printf("Hello, %s!\n", name)
}
源文件和库文件放在不同文件夹下
demo.go
package main
import (
"flag" // 接收和解析命令参数
"lib"
)
var name string
func init(){
/*
第 1 个参数为存储改命令参数值的地址
第 2 个参数指定命令参数的名称
第 3 个参数指定在未追加该命令参数时的默认值
第 4 个参数为该命令参数的简短说明,打印命令时用到
*/
flag.StringVar(&name, "name", "everyone", "The greeting object.");
}
// 根据运行程序时给定的参数问候某人
func main(){
flag.Parse() // 解析命令参数
lib.Hello(name)
}
lib/demo_lib.go
package lib
import "fmt"
// 名称的首字母大小的程序体才可以被当前包外的代码引用
// 否则只能被当前包内的其它代码引用
func Hello(name string){
fmt.Printf("Hello, %s!\n", name)
}
先安装库文件,然后运行程序:
模块私有
internal 代码包中声明的公开程序实体仅能被该代码包的直接父包及子包中的代码引用
lib/internal/internal.go
package internal
import (
"fmt"
"io"
)
// 名称的首字母大小的程序体才可以被当前包外的代码引用
// 否则只能被当前包内的其它代码引用
func Hello(w io.Writer, name string){
fmt.Fprintf(w, "Hello, %s!\n", name)
}
lib/demo_lib.go
package lib
import (
"os"
in "lib/internal"
)
// 名称的首字母大小的程序体才可以被当前包外的代码引用
// 否则只能被当前包内的其它代码引用
func Hello(name string){
in.Hello(os.Stdout, name)
}