go test 全局函数赋值小坑

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函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容