package mmysql import ( "../config" "database/sql" "log" "strings" //导入mysql的驱动 _ "github.com/go-sql-driver/mysql" ) type ServiceList struct { Id int32 `json:"id"` Name string `json:"name"` Host string `json:"host"` Area string `json:"area"` Port int32 `json:"port"` Url string `json:"url"` User string `json:"user"` Sendto string `json:"sendto"` } func GetServiceList(area string) ([]ServiceList, error) { var myconn config.MysqlConf var v []ServiceList myconn.GetMysqlConn() path := strings.Join([]string{myconn.User, ":", myconn.Passwd, "@tcp(", myconn.Conn, ")/", "services", "?charset=utf8"}, "") //打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql" db, _ := sql.Open("mysql", path) //log.Printf("conn db %s", path) //设置数据库最大连接数 db.SetConnMaxLifetime(100) //设置上数据库最大闲置连接数 db.SetMaxIdleConns(10) //验证连接 if err := db.Ping(); err != nil { log.Print("opon database fail") return v, err } rows, err := db.Query("select id,name,host,area,port,url,user,sendto FROM services.services_list where area=?", area) //获取完毕释放rows,阻止更多的列举 defer rows.Close() if err != nil { log.Println("获取错误:", err) return v, err } //如果有数据记录Next指针就不为true for rows.Next() { var id int32 var name string var host string var area string var port int32 var url string var user string var sendto string rows.Scan(&id, &name, &host, &area, &port, &url, &user, &sendto) var s ServiceList s.Id = id s.Name = name s.Host = host s.Url = url s.Port = port s.Area = area s.User = user s.Sendto = sendto v = append(v, s) //log.Println(s) } //Err返回可能的、在迭代时出现的错误。Err需在显式或隐式调用Close方法后调用。 err = rows.Err() if err != nil { log.Println("other error:", err) return v, err } //log.Println("return list with area", v) return v, nil }