Go语言学习的坑爹历程
鄙人暑期实习,需要用Go语言进行编程
在go语言中,结构体的定义只支持变量的声明,成员函数是采用“接口方法”来实现的
留一个成员定义的模板在此
package main import ( "fmt" "math" ) type point struct { x float64 y float64 } func (pt point) getDistance() float64 { return math.Sqrt(pt.x*pt.x + pt.y*pt.y) } func main() { pointA := point{3, 4} fmt.Println(pointA.getDistance()) }
map[string]interface{}转struct代码
package main import ( "fmt" "github.com/mitchellh/mapstructure" ) type student struct{ id int `json:"id"` Name string `json:"name"` Adress []string `json:"adress"` } func main() { val := map[string]interface{}{ "id":1, "name":"xiaoming", "adress":[]string{"beijing","nanjing"}, } stu := student{} err := mapstructure.Decode(val,&stu) if err != nil { fmt.Println(err.Error()) } fmt.Println("val:") fmt.Println(val) fmt.Println("struct:") fmt.Println(stu) }
gorm通过结构体实现CRUD的代码如下:
package main import ( "fmt" "github.com/mitchellh/mapstructure" "gorm.io/driver/mysql" "gorm.io/gorm" ) //大小写的坑!!!!!! type User struct { Id int32 `gorm:"column:id;primary_key"` Name string `gorm:"column:name"` } func AddToDB(id int32, name string) { user := User{ Id: id, Name: name, } fmt.Println("user = ", user) DB.Table("test_table").Create(&user) } var DB *gorm.DB var err error func RemoveFromDB() { //支持移除多个 DB.Table("test_table").Where("id<=?", 102).Delete(nil) } func UpdateFromDB_new() { var need_modify = User{104, "modify2"} DB.Table("test_table").Where("id<=104").Updates(need_modify) } func main() { DB, err = gorm.Open(mysql.New(mysql.Config{ //root表示数据库账号,:和@中间是密码(这里没有设置) //tcp中间的地址和端口表示连接的数据库的ip地址和端口 //localtest_alpahinf表示当前选择的数据库名 //其余信息喂默认信息 DSN: "root:@tcp(127.0.0.1:3306)/localtest_alphainf?charset=utf8mb4&parseTime=True&loc=Local", }), ) //AddToDB(1234, "alphainf") //AddToDB(114, "beta") //AddToDB(104, "orzlyy") UpdateFromDB_new() mp := make(map[string]interface{}) DB.Table("test_table").Where("id = 114").Find(mp) now := User{} mapstructure.Decode(mp, &now) fmt.Println(now) }