main.go中调用 modle中的xorm 为nil

tablecell · 2021-03-17 14:50:51 · 1389 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-03-17 14:50:51 的主题,其中的信息可能已经有所发展或是发生改变。

目录结构

proj
│  go.mod
│  main.go
│  go.sum
│  user.db
│
└─models
        dao.go

proj\models\dao.go

package models

import (
    "fmt"
    "github.com/go-xorm/xorm"
    _ "github.com/mattn/go-sqlite3"
    "time"
)

var (
  baseTimestamp time.Time
  x  *xorm.Engine
)

func CallFuncFromMoles() {
    fmt.Println(baseTimestamp)
    fmt.Println(x)
}
func init() {
      fmt.Println("models init")

    baseTimestamp = time.Now()
    fmt.Println(baseTimestamp)

    x, err := xorm.NewEngine("sqlite3", "user.db")
    fmt.Println(x, err)

}

proj\main.go

package main
import (
 "proj/models"
"fmt"
)

func main(){
    fmt.Println("now in main CallFuncFromMoles")
    models.CallFuncFromMoles()

}

go run main.go

ef20 UUID:0xf4f2e0 VARBINARY:0xf4f2e0 VARCHAR:0xf4f2e0 VERSION:0xf4eea0 YEAR:0xf4f2e0] <nil> map[] {{0 0} 0 0 0 0} 0xc0000ae128} <nil>
now in main CallFuncFromMoles
2021-03-17 21:09:08.1911855 +0800 CST m=+0.006000301
<nil>

baseTimestamp init和 CallFuncFromMoles都 有值

x 只在init 有值,CallFuncFromMoles为nil


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1389 次点击  
加入收藏 微博
2 回复  |  直到 2021-07-16 11:44:49
LintP
LintP · #1 · 4年之前

注意不要乱用 := image.png

tablecell
tablecell · #2 · 4年之前

@LintP</a> 变量声明后不能再用 := 赋值 但是全局变量却能例外 也不报错,但是并不是预期的要给全局变量赋值,而是在函数体中屏蔽全局变量 这个 := 用法真是坑人" name="content" class="comment-textarea" rows="8" style="width: 100%;">1楼 <a href="/user/LintP" title="@LintP">@LintP</a> 变量声明后不能再用 := 赋值 但是全局变量却能例外 也不报错,但是并不是预期的要给全局变量赋值,而是在函数体中屏蔽全局变量。 这个 := 用法真是坑人

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传