Golang package basic
Code
.
└── src
├── logger
│ └── start.go
├── main.go
└── third
├── external.go
└── inner.go
src/main.go
_ "./logger"
这里的 _
就如同赋值操作时忽略某些值一样, 这里表示引入这个 package 但不使用它.
引入 package 的一个副作用是执行这些文件的 init()
方法. 这里引入了 logger
, 就会执行其中的 init()
.
还可以对引入的 package 起别名, 比如: vendor_pkg
.
package main
import (
"fmt"
_ "./logger"
vendor_pkg "./third"
)
// Name : Global var in main
var Name = "DEF at main.go"
func init() {
Name = "INIT at main.go"
}
func main() {
fmt.Println("main.Name: \t", Name)
fmt.Println("third.Name: \t", vendor_pkg.Name)
fmt.Println("\nthird#Hello:\t")
vendor_pkg.Hello()
}
src/logger/start.go
package logger
import (
"fmt"
"time"
)
func init() {
fmt.Println("Start at:", time.Now().Unix())
}
src/third/inner.go
全局变量在 package 内部可以共享.
package third
import "fmt"
func init() {
Name = "INIT at inner.go"
}
// change_name : private method
func changeName(newName string) {
Name = newName
fmt.Println("---Do third#changeName---")
}
src/third/external.go
想要对外暴露的需要首字母大写.
package third
import "fmt"
// Name : Global var int third
var Name = "DEF at external.go"
// Hello : Public Method
func Hello() {
changeName("Changed New Name")
fmt.Println("Hi,", Name)
}