关于var赋值的疑问
- 两代码之中仅使用了大小写不同的变量,其余代码相同,但是大些的会报错,小写的执行正常,这是怎么回事呢?
出错代码:
package main import ( "fmt" "github.com/gin-gonic/gin" "gorm.io/driver/mysql" "gorm.io/gorm" ) var DB *gorm.DB // 区别 var err error type Person struct { ID uint `json:"id` Name string `json:"name"` Pass string `json:"pass"` } func main() { DSN := "root:passwd@tcp(127.0.0.1:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local" DB, err := gorm.Open(mysql.Open(DSN), &gorm.Config{}) // 区别 if err != nil { fmt.Println(err) } DB.AutoMigrate(&Person{}) // 区别 r := gin.Default() r.GET("/", GetProjects) r.Run(":80") } func GetProjects(c *gin.Context) { var people []Person if err := DB.Find(&people).Error; err != nil { // 区别 c.AbortWithStatus(404) fmt.Println(err) } else { c.JSON(200, people) } } // 出错
正常代码:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var db *gorm.DB // 区别
var err error
type Person struct {
ID uint `json:"id`
Name string `json:"name"`
Pass string `json:"pass"`
}
func main() {
DSN := "root:passwd@tcp(127.0.0.1:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(DSN), &gorm.Config{}) // 区别
if err != nil {
fmt.Println(err)
}
db.AutoMigrate(&Person{}) // 区别
r := gin.Default()
r.GET("/", GetProjects)
r.Run(":80")
}
func GetProjects(c *gin.Context) {
var people []Person
if err := db.Find(&people).Error; err != nil { // 区别
c.AbortWithStatus(404)
fmt.Println(err)
} else {
c.JSON(200, people)
}
}
// 正确
建议参考下图