初级会员
  • 第 39676 位会员
  • JYZ1024
  • 2019-07-01 20:49:41
  • Offline
  • 19 84

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 问题解决了,自己回答一下。。。参考:https://www.jianshu.com/p/858a0791f618 文件开头的// +build XXX指示了构建约束(条件),也称为构建标记,是一个开始的行注释,作用是在执行go build指令时,根据传入的不同的参数(-flag)构建不同的文件。 vscode 的解决方法建参考链接 goland 的解决方法:preferences-> Build Tags & Vendoring -> Custom tags 设置为XXX ![tag.png](https://static.studygolang.com/191011/26a981f70f5f2ceed36e6fbe154bb0c9.png)
  • 对于无缓冲的channel,发送时会阻塞在发送位置直到被接收后程序继续往下执行,接收时会阻塞在接收位置直到接收到信息然后程序继续往下执行。是否阻塞和时间无关,是为了某种情景下认为的控制。就本例而言,“this is send"写入channel中,此时select模块已经执行完成,消息没有被接收,因此"send ok"直到程序结束也不会被输出。
  • 大概可以这么理解:函数本身也是变量的一种,只不过本身存储了一些额外的信息(函数体);因此返回一个函数和返回一个变量是一致的,所以输出的函数地址是相同的(可以将函数视为引用类型的变量) 两个不同的闭包实例是因为生成闭包的上下文不同,即传入的value和函数体是分别存储的 闭包函数Accumulate可以视为 ```go type Accumulate struct { value int f func() int } ``` (实际不一定是这样),accumulate和accumulate2就是两个结构体实例,其f的值均指向同一块内存 个人理解,如有不对的地方,谢谢指正
  • ```go import ( "fmt" "github.com/garyburd/redigo/redis" "time" ) var ( redispool *redis.Pool ) func init() { redispool = &redis.Pool{ MaxIdle: 1, MaxActive: 0, IdleTimeout: time.Second * 20, Dial: func() (conn redis.Conn, err error) { c, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println("get connection error,", err.Error()) return nil, err } return c, nil }, } } func main(){ con:=redispool.Get() defer con.Close() res,err := redis.String(con.Do("ping")) if err!=nil{ fmt.Println(err.Error()) return } fmt.Println(res) } ```