gpt4 book ai didi

go - go服务器上的一页REST api返回系统MAC地址

转载 作者:IT王子 更新时间:2023-10-29 01:46:57 25 4
gpt4 key购买 nike

我有一个基于 PHP 的 Web 应用程序。在登录页面上,它对 Go 服务器(位于客户端计算机上)进行 AJAX 调用以获取其 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 库和设置的情况下,一个独立的、编译好的 Go 文件(在 ubuntu 上创建)可以在其他系统(如 windows、linux 或 mac)上运行吗?

最佳答案

可以找到关于如何为不同操作系统交叉编译 Go 程序的信息 here .简而言之,不要运行 go build main.go,而是运行:

env GOARCH=amd64 GOOS=<target_OS> CGO_ENABLED=1 go build -v main.go

我通常有一个 Makefile 来简化 linux、windows 和 macOS 的交叉编译过程。

关于你的第二个问题,我只能在我尝试 ListenAndServe 两次时在我的机器上重现你的错误。 IE。我怀疑在调试周期中,您在尝试在另一个终端窗口中启动新实例时忘记关闭正在运行的服务器。确保在再次运行之前使用 ctrl + c 中止您的 Go 程序。

关于go - go服务器上的一页REST api返回系统MAC地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51209748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com