Golang 中国

bigbear

30岁才开始

Golang China 第 487 号会员,加入于 2013-05-28 15:25



30岁才开始

bigbear最近回复了


回复了 mouot 创建的主题: 关于Go中的queryRow 2018-06-04 17:10

mysql不清楚, PG里面, 数据库驱动, 有专用的类型, sql.NullString, sql.NullInt64 专门的数据类型.

回复了 aaaaaaaa1 创建的主题: 用GO开发WEB一年, 今天怒了! GO不适合做WEB; 2018-05-15 10:24

我猜楼主是在因为, 动态json序列化为go struct的问题苦恼吧? json与go的struct的序列化适用于固定接口协议. 如果是动态json协议可以用map或者第三方的包,https://github.com/buger/jsonparser,
这个可能是你想要的.

回复了 samete 创建的主题: 赋值报错问题 2018-04-02 09:23

:= 表示声明并赋值, sss不能再次声明.

回复了 luyingjie 创建的主题: 关于反射的求助 2018-03-30 10:16

看看reflect包的文档

回复了 jingkaisong 创建的主题: 新人求教,请看代码 2018-03-12 12:47

一楼正解, *interface{} 是指向接口类型的指针. 函数内部再做类型转换.

回复了 wasd8546201 创建的主题: 新人求助,关于defer和waitgroup使用中遇到的一点问题 2018-03-12 12:43

registerChan 写不进去, 堵塞了吧

回复了 kevin 创建的主题: defer的这个方法不是很理解 2018-03-06 14:37
  1. defer的作用域的一个函数, 不是代码块.
  2. defer可以理解为把一个子函数压入执行栈的最底部, 函数执行结束时, 自动执行此子函数.
  3. 还是涉及子函数被调用时, 子函数参数的取值问题, defer fmt.Print(“%d”,i) 如果i是值类型的, i的取值, 是在defer语句发生时取的, 而不是在fmt子函数被执行时才确定i的值. 如果i是指针类型的, 就是子函数运行时寻址取值.
    (The arguments to the deferred function (which include the receiver if the function is a method) are evaluated when the defer executes, not when the call executes.)
    defer的函数如果是一个struct的方法, 可以理解为, struct实例本身就是函数的一个隐藏参数receiver, defer apple.eat(a), 等同 defer eat(apple, a), 也存在apple是值类型,还是指针的情况.

  4. defer的子函数, 是在return a, b; 之后执行的, 也就是如果你的return语句有返回值, 会先对a,b取值, 然后才执行defer的子函数. 那么defer的子函数的执行,是不能影响a,b的值的.

  5. panic时,defer函数也会被执行.

package main

import (
    "fmt"
)

func main() {
    x := TestA()
    fmt.Println(x)
}

func TestA() int {
    a := 1
    b := 2

    defer tt1(&a, &b)
    defer tt2(a, b)

    c := a + b
    a = 5
    if c == 3 {
        panic("TestA")
    }

    return c
}

func tt1(a *int, b *int) {
    fmt.Printf("tt1: %d, %d \n", *a, *b)
}
func tt2(a int, b int) {
    fmt.Printf("tt2: %d, %d \n", a, b)
}
回复了 gao88 创建的主题: io.ReadFull接收不到数据 2018-03-06 14:10

应该是跟Reader的实现有关, ReadFull的第一参数只是一个接口io.Reader, 如果你读的是网络请求通常实现是net.Conn接口的Read方法, 如果Conn实现没有设置超时时间,会导致ReadFull方法长时间等待.
// Read reads data from the connection.
// Read can be made to time out and return an Error with Timeout() == true
// after a fixed time limit; see SetDeadline and SetReadDeadline.
Read(b []byte) (n int, err error)

bigbear 创建的更多回复