У меня есть веб-приложение на основе PHP. На странице входа в систему он вызывает AJAX-сервер Go (расположенный на клиентском компьютере), чтобы получить его MAC-адрес. Ниже приведен код сервера Go:
основной пакет
import (
"net"
"net/http"
"encoding/json"
)
//define struct for mac address json
type MacAddress struct {
Id string
}
/**
* Get device mac address
*/
func GetMacAddress(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
mac := &MacAddress{Id: ""}
ifas, err := net.Interfaces()
if err != nil {
json.NewEncoder(w).Encode(mac)
return
}
for _, ifa := range ifas {
a := ifa.HardwareAddr.String()
if a != "" {
mac := &MacAddress{Id: a}
json.NewEncoder(w).Encode(mac)
break
}
}
return
}
/**
* Main function
*/
func main() {
http.HandleFunc("/", GetMacAddress)
if err := http.ListenAndServe(":8000", nil); err != nil {
panic(err)
}
}
Результат:
{Id: "8c:16:45:5h:1e:0e"}
Здесь у меня 2 вопроса.
Иногда я получаю ошибку
panic: listen tcp :8000: bind: address already in use
и я вручную убиваю процесс. Итак, что можно улучшить в моем коде, чтобы избежать этой ошибки и закрыть ранее запущенный сервер?
Может ли автономный скомпилированный файл Go (созданный в Ubuntu) запускаться на других системах, таких как windows, linux или mac, без наличия всех библиотек Go и установки?