package mmysql import ( "../config" "database/sql" "log" "strings" //导入mysql的驱动 _ "github.com/go-sql-driver/mysql" ) type ServiceList struct { Id int32 `service id` Name string `service name` Host string `hostip` area string `area` port int `port` Url string `monitor url` user string `user` sendto string `alter message send to` } func GetServiceList(area string) (ss []ServiceList) { var myconn config.MysqlConf 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 } rows, err := db.Query("select id,name,host,url FROM services.services_list where area=?", area) //获取完毕释放rows,阻止更多的列举 defer rows.Close() if err != nil { log.Println("获取错误:", err) return } //如果有数据记录Next指针就不为true var v []ServiceList for rows.Next() { var id int32 var name string var host string var url string rows.Scan(&id, &name, &host, &url) var s ServiceList s.Id = id s.Name = name s.Host = host s.Url = url v = append(v, s) //log.Println(s) } //Err返回可能的、在迭代时出现的错误。Err需在显式或隐式调用Close方法后调用。 err = rows.Err() if err != nil { log.Println("other error:", err) return v } //log.Println("return list with area", v) return v }