Go基础编程 - 03 - init函数、main函数、_(下划线)

1. init 函数

Go语言中,init 函数用于包(package)的初始化。具有以下特征:

1. init 函数用于程序执行前包的初始化,如初始化变量等。
 
2. 每个包可拥有多个 init 函数。

3. 包的每个源文件可有多个 init 函数(执行顺序有上到下)。

4. 同一个包中多个 init 函数的执行顺序 Go 语言没有明确定义。

5. 不同包的 init 函数按照包导入的依赖关系决定该初始化函数的执行顺序。

6. init 函数不能被其它函数调用,在 main 函数执行之前自动被调用。

2. main 函数

Go语言默认入口函数(主函数)

3. init 函数与 main 函数异同

  • 相同点:均无参数和返回值,由Go程序自动调用。
  • 不同点:init 函数可以应用于任意包中,且可重复多个;main 函数只能用于 main 包,且只能定义一个。

4. _ (下划线)

"-" 是特殊标识符,用来忽略结果。

  • import 中使用
    当导入一个包时,该包下所有init()函数都会执行;如果我们并不需要把整个包导入进来,仅仅希望执行它的init()函数。就可使用下划线(_)引入该包, import _ package 仅调用了init()函数,无法调用包内其它函数。

  • 在代码中使用
    占位符(忽略变量):意思是那个位置本应赋给某个值,但咱们不需要这个值;所以就把该值赋给下划线,意思是丢掉不要,这样编译器可以更好的优化。

    这种情况就是占位用的,方法返回两个结果,而你只想要一个结果;那另一个就用 “_” 占位。而如果用变量的话,变量不使用,编译器是会报错。

    任何类型的单个值都可以丢给下划线。

示例

代码结构如下:

 src 
   +--- main.go            
   +--- learn
           +--- mynote.go
   +--- hello
           +--- hello.go

learn/mynote.go 代码:

package learn

import (
    "fmt"
)

func init() {
    fmt.Println("Exec the init func of mynote!")
}

// 一个文件可以有多个init函数,同样证明一个包可以有多个init函数
func init() {
    fmt.Println("Second exec the init func of mynote!")
}

func Note() {
    fmt.Println("Golang study note!")
}

hello/hello.go 代码:

package hello

import (
    "fmt"
)

func init() {
    fmt.Println("Exec the init func of hello.go!")
}

func SayHello() {
    fmt.Println("Hello, Everyone!")
}

func MultiReturn() (int, string) {
    return 100, "一百"
}

main.go 代码:

package main

import (
    _ "learn"   
    "hello"
    "fmt"
)

func main() {

    // 无法调用learn内的函数,被 _ 忽略
    // learn.Note()

	hello.SayHello()

	i, s := hello.MultiReturn()
	fmt.Printf("i=%d, s=%s \n", i, s)

    // _ 忽略返回变量
	i1, _ := hello.MultiReturn()
	fmt.Printf("i1=%d", i1)
}

执行 go run ./,执行整个包使用 ./

PS F:\SelfProject\Go\Learning> go run ./
Exec the init func of mynote!
Second exec the init func of mynote!
Exec the init func of hello.go!
Heollo, Everyone!
i=100, s=一百
i1=100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值