package modules import ( "database/sql" "log" ) type IpInformation struct { Ip string `json:"ip"` CountryIsoCode string `json:"Country_Iso_Code"` CountryName string `json:"Country_Name"` City string `json:"City"` TimeZone string `json:"Time_Zone"` } func MysqlQuery(ip string, dsn string) IpInformation { // 连接到MySQL数据库 db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 执行查询语句 query := ` SELECT country_iso_code, country_name, city_name,time_zone FROM ( SELECT * FROM geolite2_city_ipv4_string WHERE ? between network_start_ip and network_last_ip LIMIT 1 ) net LEFT JOIN geolite2_city_locations_en ON net.geoname_id = geolite2_city_locations_en.geoname_id; ` rows, err := db.Query(query, ip) if err != nil { log.Fatal(err) } defer rows.Close() var IpInformatin IpInformation // 处理查询结果 for rows.Next() { var ( country_iso_code string country_name string city_name string time_zone string ) err := rows.Scan(&country_iso_code, &country_name, &city_name, &time_zone) if err != nil { log.Fatal(err) } IpInformatin = IpInformation{ Ip: ip, CountryIsoCode: country_iso_code, CountryName: country_name, City: city_name, TimeZone: time_zone, } // 打印结果 //fmt.Println("country_iso_code=", country_iso_code) //fmt.Println("country_name=", country_name) //fmt.Println("city_name=", city_name) //fmt.Println("time_zone=", time_zone) } // 检查是否有错误发生 err = rows.Err() if err != nil { log.Fatal(err) } log.Print("tag:mysqlquery=", IpInformatin) return IpInformatin }