-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
一次提交 #23
base: main
Are you sure you want to change the base?
一次提交 #23
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package main | ||
|
||
import ( | ||
"golang.org/x/crypto/bcrypt" | ||
"gorm.io/driver/mysql" | ||
"gorm.io/gorm" | ||
"gorm.io/gorm/logger" | ||
"log" | ||
) | ||
|
||
var db *gorm.DB | ||
|
||
// 初始化数据库 | ||
func inDB() { | ||
var err error | ||
//数据库mysql连接信息 | ||
dsn := "root:ZJHZjn20060629@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" | ||
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ | ||
Logger: logger.Default.LogMode(logger.Info), | ||
}) | ||
//进行连接测试 | ||
if err != nil { | ||
log.Fatal("数据库连接失败: %v", err) | ||
} | ||
//自动迁移与创建用户表 | ||
if err := db.AutoMigrate(&User{}); err != nil { | ||
log.Fatal("迁移数据库错误: %v", err) | ||
} | ||
if err := db.AutoMigrate(&Question{}); err != nil { | ||
log.Fatal("迁移数据库错误: %v", err) | ||
} | ||
if err := db.AutoMigrate(&Answer{}); err != nil { | ||
log.Fatal("迁移数据库错误: %v", err) | ||
} | ||
//fmt.Println("用户表创立成功") | ||
} | ||
Comment on lines
+13
to
+36
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Hardcoded database credentials detected
🔗 Analysis chainImprove database initialization and error handling. There are several areas for improvement in the
Here's a suggested refactor: func inDB() error {
var err error
dsn := os.Getenv("DATABASE_URL")
if dsn == "" {
return errors.New("DATABASE_URL environment variable is not set")
}
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
return fmt.Errorf("failed to connect to database: %w", err)
}
if err := db.AutoMigrate(&User{}, &Question{}, &Answer{}); err != nil {
return fmt.Errorf("failed to auto-migrate: %w", err)
}
return nil
} Remember to handle the returned error in the calling function. To ensure the 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Check if DATABASE_URL is used in the code
rg 'os\.Getenv\("DATABASE_URL"\)' --type go
# Check if there are any hardcoded database credentials
rg '(username|password|root):.+@tcp\(' --type go
Length of output: 204 |
||
|
||
// 加密,哈希保护用户密码和验证 | ||
func savepassword(password string) (string, error) { | ||
sec, err := bcrypt.GenerateFromPassword([]byte(password), 14) | ||
return string(sec), err | ||
} | ||
|
||
func checkpassword(password, hash string) bool { | ||
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) | ||
return err != nil | ||
} | ||
Comment on lines
+44
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Improve clarity of password check function. The Consider modifying the function for better clarity: func checkpassword(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
} This way, the function returns |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,40 @@ | ||||||
module newtest | ||||||
|
||||||
go 1.23.1 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Incorrect Go version specified. The Go version 1.23.1 does not exist. As of October 2024, the latest stable version is in the 1.21.x series. Please update to a valid and recent Go version. Apply this diff to fix the Go version: -go 1.23.1
+go 1.21 📝 Committable suggestion
Suggested change
|
||||||
|
||||||
require ( | ||||||
filippo.io/edwards25519 v1.1.0 // indirect | ||||||
github.com/bytedance/sonic v1.12.3 // indirect | ||||||
github.com/bytedance/sonic/loader v0.2.0 // indirect | ||||||
github.com/cloudwego/base64x v0.1.4 // indirect | ||||||
github.com/cloudwego/iasm v0.2.0 // indirect | ||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect | ||||||
github.com/gabriel-vasile/mimetype v1.4.5 // indirect | ||||||
github.com/gin-contrib/sse v0.1.0 // indirect | ||||||
github.com/gin-gonic/gin v1.10.0 // indirect | ||||||
github.com/go-playground/locales v0.14.1 // indirect | ||||||
github.com/go-playground/universal-translator v0.18.1 // indirect | ||||||
github.com/go-playground/validator/v10 v10.22.1 // indirect | ||||||
github.com/go-sql-driver/mysql v1.8.1 // indirect | ||||||
github.com/goccy/go-json v0.10.3 // indirect | ||||||
github.com/jinzhu/inflection v1.0.0 // indirect | ||||||
github.com/jinzhu/now v1.1.5 // indirect | ||||||
github.com/json-iterator/go v1.1.12 // indirect | ||||||
github.com/klauspost/cpuid/v2 v2.2.8 // indirect | ||||||
github.com/leodido/go-urn v1.4.0 // indirect | ||||||
github.com/mattn/go-isatty v0.0.20 // indirect | ||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||||
github.com/modern-go/reflect2 v1.0.2 // indirect | ||||||
github.com/pelletier/go-toml/v2 v2.2.3 // indirect | ||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect | ||||||
github.com/ugorji/go/codec v1.2.12 // indirect | ||||||
golang.org/x/arch v0.10.0 // indirect | ||||||
golang.org/x/crypto v0.27.0 // indirect | ||||||
golang.org/x/net v0.29.0 // indirect | ||||||
golang.org/x/sys v0.25.0 // indirect | ||||||
golang.org/x/text v0.18.0 // indirect | ||||||
google.golang.org/protobuf v1.34.2 // indirect | ||||||
gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
gorm.io/driver/mysql v1.5.7 // indirect | ||||||
gorm.io/gorm v1.25.12 // indirect | ||||||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= | ||
github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= | ||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= | ||
github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= | ||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= | ||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= | ||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | ||
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= | ||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= | ||
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= | ||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= | ||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= | ||
github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= | ||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= | ||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= | ||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= | ||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= | ||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= | ||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= | ||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= | ||
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= | ||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= | ||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | ||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | ||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= | ||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= | ||
golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= | ||
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= | ||
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= | ||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= | ||
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= | ||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= | ||
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= | ||
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= | ||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consider using dependency injection instead of a global variable.
While using a global variable for the database connection is common, it can make testing and dependency injection more challenging. Consider passing the
db
connection as a parameter to functions that need it, or using a struct to encapsulate the database connection and related methods.Additionally, it would be helpful to add a comment explaining the purpose of this variable and where it's initialized.
Example of using a struct: