小编v1c*_*t0r的帖子

如何知道Golang中任意类型的变量是否为零?

因为并非所有类型都具有可比性,例如切片.所以我们不能这样做

var v ArbitraryType
v == reflect.Zero(reflect.TypeOf(v)).Interface()
Run Code Online (Sandbox Code Playgroud)

编辑 - 解决方案reflect.DeepEqual

var v ArbitratyType
zero := reflect.Zero(reflect.TypeOf(v)).Interface()
isZero := reflect.DeepEqual(v, zero)
Run Code Online (Sandbox Code Playgroud)

去关于reflect.DeepEqual的文档

DeepEqual测试深度相等.它尽可能使用normal == equality,但会扫描数组,切片,映射和结构域的元素.

reflection go go-reflect

6
推荐指数
2
解决办法
1605
查看次数

Go 程序的主协程和衍生协程之间的区别

使用 创建服务器时gRPC,如果我gRPC在主进程中启动服务器,它可以处理来自客户端的多达(数千个)请求。但是,如果我将服务器作为 goroutine 启动,它只能处理一些请求(数百个)并且在卡住之后。我已经通过一个非常简单的示例 google.golang.org/grpc/examples/helloworld 测试并确认了这一点。

是因为生成的 goroutines 堆栈大小非常小(2Kbytes),而主 goroutines 大得多?主协程和衍生协程有什么区别?

示例链接。修改部分示例如下。

greeter_server/main.go

func main() {
    go func() {
        lis, err := net.Listen("tcp", port)
        if err != nil {
            log.Fatalf("failed to listen: %v", err)
        }   
        s := grpc.NewServer()
        pb.RegisterGreeterServer(s, &server{})
        s.Serve(lis)
    }() 

    for {
    }   
}
Run Code Online (Sandbox Code Playgroud)

greeter_client/main.go

func main() {
    // Set up a connection to the server.
    for i := 0; i < 500; i++ {
        conn, err := grpc.Dial(address, grpc.WithInsecure())
        if err …
Run Code Online (Sandbox Code Playgroud)

go goroutine grpc

4
推荐指数
1
解决办法
3652
查看次数

多个线程可以同时访问共享内存吗?

多个线程在 CPU 的多个核心上并行运行。他们可以同时访问主存储器吗?

multithreading cpu-architecture shared-memory hardware-acceleration

2
推荐指数
1
解决办法
4629
查看次数