go test 全局函数赋值小坑

2019-09-25  本文已影响0人  不要重不要重
package internel                                                                               
                                                                                               
var M *int                                                                                     
                                                                                               
func init() {                                                                                  
    M = new(int)                                                                               
    a := 10                                                                                    
    M = &a                                                                                     
}

main

package main

import (
    "fmt"
    "test/test1/internel"
)

var t *int = internel.M

//先赋值,再init
func init() {
    fmt.Println(*t)
    var b = 100 
    t = &b
}

func main() {
    fmt.Println(t, ",", *t) 
}

可以正常 运行
but

package util

var N int 

func init() {
    N = 5 
}

testintg

package util

import (
    "fmt"
    "testing"
)

var u int = N 

func Test_util(t *testing.T) {
    fmt.Println(u)
}

这里的u打印出来是个0,为什么呢?
我忽略了 util 和Test_util 是属于一个包的,
在一个包中,init 和 全局变量的赋值顺序是
先全局变量,然后 再初始化init函数

上一篇下一篇

猜你喜欢

热点阅读