小编Leo*_*Tao的帖子

golang(*interface {})(nil)是否为零?

代码段如下:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    a := (*interface{})(nil)
    fmt.Println(reflect.TypeOf(a), reflect.ValueOf(a))
    var b interface{} = (*interface{})(nil)
    fmt.Println(reflect.TypeOf(b), reflect.ValueOf(b))
    fmt.Println(a == nil, b == nil)
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

*interface {} <nil>
*interface {} <nil>
true false
Run Code Online (Sandbox Code Playgroud)

所以var interface{}不同:=,为什么?

go

6
推荐指数
1
解决办法
2463
查看次数

为什么goroutine阻止这个http服务器的主要功能?

我想设置一个http服务器,httprouter监听两个端口8888,8080就像下面的代码一样.

package main

import (
    "fmt"
    "github.com/julienschmidt/httprouter"
    "log"
    "net/http"
)

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    fmt.Fprint(w, "Welcome!\n")
}

func main() {
    router := httprouter.New()
    router.GET("/", Index)

    fmt.Println("listen on 8080")
    // this is where blocked
    go log.Fatal(http.ListenAndServe(":8080", router))
    fmt.Println("listen on 8888")
    log.Fatal(http.ListenAndServe(":8888", router))
}
Run Code Online (Sandbox Code Playgroud)

但它无法正常工作,我的服务器只能听.8080如果我做了一些改动:

go func() { log.Fatal(http.ListenAndServe(":8080", router)) }()
Run Code Online (Sandbox Code Playgroud)

它既可以正常工作,8080也可以8888.为什么?它是关于closure还是别的什么?

go

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

标签 统计

go ×2