golang golang中的Unix over Unix域套接字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang golang中的Unix over Unix域套接字相关的知识,希望对你有一定的参考价值。
package main
import (
"fmt"
"net"
"net/http"
"os"
)
func main() {
if len(os.Args) < 2 {
fmt.Fprintln(os.Stderr, "usage:", os.Args[0], "/path.sock [wwwroot]")
return
}
fmt.Println("Unix HTTP server")
root := "."
if len(os.Args) > 2 {
root = os.Args[2]
}
os.Remove(os.Args[1])
server := http.Server{
Handler: http.FileServer(http.Dir(root)),
}
unixListener, err := net.Listen("unix", os.Args[1])
if err != nil {
panic(err)
}
server.Serve(unixListener)
}
package main
import (
"context"
"flag"
"fmt"
"io"
"net"
"net/http"
"os"
"strings"
)
func main() {
post := flag.String("d", "", "data to POST")
help := flag.Bool("h", false, "usage help")
flag.Parse()
if *help || len(flag.Args()) != 2 {
fmt.Fprintln(os.Stderr, "usage:", os.Args[0], "[-d data] /path.socket /uri")
flag.PrintDefaults()
os.Exit(0)
}
fmt.Println("Unix HTTP client")
httpc := http.Client{
Transport: &http.Transport{
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
return net.Dial("unix", flag.Args()[0])
},
},
}
var response *http.Response
var err error
if len(*post) == 0 {
response, err = httpc.Get("http://unix" + flag.Args()[1])
} else {
response, err = httpc.Post("http://unix"+flag.Args()[1], "application/octet-stream", strings.NewReader(*post))
}
if err != nil {
panic(err)
}
io.Copy(os.Stdout, response.Body)
}
Golang gRPC默认值
给出以下protobuf定义:
message MyMessage {
string Foo = 1;
int From = 2;
int To = 3;
}
然后,我想只从客户端发送Foo字符串,没有问题。问题出现在服务器上,我想知道From和To是否具有值(UNIX时间戳)。如果客户端未明确设置该值,则Go会将值设置为0,这是完全有效的Unix时间戳。在这一点上,我不知道客户是否打算给我1970-01-01 00:00:00还是要留空。
我可以添加两个布尔值,说明客户是否设置了发件人和发件人,但是我觉得应该有一个比这更优雅的解决方案。
是否有一种方法可以真正找出客户端是否打算发送空值,或者是否将值实际设置为0
?对于字符串等,""
也是如此。
答案
您无法区分缺少的字段和在proto3中设置为其默认值的字段。这是设计使然。在Issue 1606中引用xfxyjwf:
删除proto3中场的存在的理由:
- 如果明确需要此类状态信息,则有几种解决方法,例如包装,显式has_field布尔值。如果与proto2可选的向后电线兼容,也可以使用其中一个必填字段。
以上是关于golang golang中的Unix over Unix域套接字的主要内容,如果未能解决你的问题,请参考以下文章
golang 去unix信号ctrl + C.
解决unknown import path "golang.org/x/sys/unix": unrecognized import path "golang.org/x
golang的并发
golang
『Golang』—— 标准库之 os
golang语言特性