FlashKnight

中文名:闪侠,英文名:FlashKnight

第 2943 号会员 /

回复了 yuyi98 创建的主题: 为什么slice可以直接定义使用,而map不可以直接定义使用?

我想你应该是误会了,go里每种类型都有属于自己的

空值!

例如:

int空值是0,

string空值是””而不是null或者nil(很多人不理解,这与其他语言确实有一点区别),

Slice空值是长度为0的Slice而不是nil,

map空值是nil,

error空值是nil,

struct空值是一个“所有成员都是空值”的空Struct而不是nil,

所以:

1、很多时候,你可以直接append()一个元素到空Slice里,但是你却不能对空map操作,因为map的空值是 nil
2、你不能粗鲁地判断一个struct是不是nil,因为它永远不可能是nil,所以你可以通过返回一个error来判断是否为空,就像很多go标准库里的做法那样:if err != nil

回复了 weca 创建的主题: package name 可以重复吗

可以,但是同一个包下不可以有两个同名的函数或者变量之类的

回复了 sky123 创建的主题: php VS nodejs VS golang

我的建议是,不要纠结用什么技术,就直接使用你熟悉的技术

尽快把产品做出来上线运营

否则还是不太适合创业

回复了 Berkeley 创建的主题: golang main包下main函数的问题

我见到很多程序员为了表明自己的“个性”,为各种IDE做宣传,而当他们真正工作的时候,却没有机会使用。这表明,还是需要一种“约束”来统一程序员的工作流程、代码风格、IDE等等,多人协作起来才不会产生各种浪费时间的问题

回复了 创建的主题:

还有,不要在调试状态下做benchmark,如果你是在IDE里运行的,劳驾你试试在cmd/终端里执行

回复了 leiyuhao110 创建的主题: 如何输出数组的地址

我提畅不要过分依赖内存地址,因为……
内存地址会变的

x := make([]uint32, 0)
for i:= uint32(0); i<uint32(10); i++{
    x = append(x, i)
    addr := &x[0]
    fmt.Println(addr)
}

输出:

```
0x11508230
0x11508230
0x11508270
0x11508270
0x11507960
0x11507960
0x11507960
0x11507960
0x11504180
0x11504180
```

你确定你这样大丈夫?
如果你非用不可,还是用 &x 吧,就像这样:

package main

import (
    "unsafe"
    "fmt"
)

func main() {
    x := make([]uint32, 0)
    for i:= uint32(0); i<uint32(10); i++{
        x = append(x, i)
        addr := &x
        fmt.Println( unsafe.Pointer(addr) )
    }
}

结果可以看到x的内存地址是固定的,So……

```
0x114d8230
0x114d8230
0x114d8230
0x114d8230
0x114d8230
0x114d8230
0x114d8230
0x114d8230
0x114d8230
0x114d8230
```

最后再啰嗦几句,那个unsafe包虽然很好用,但是彻底不推荐,因为完全违法了Go语言的设计初衷。Golang本身设计的目的就是把这些非常容易出错的 “指针传递”、“多线程同步”、“内存管理” 这些细节隐藏起来,避免你在编码的时候重复踩到 C/C++ 的那些坑。我这里只是为了演示一下Slice内存地址的一致性……

回复了 sneermorn 创建的主题: 关于database/sql的实用问题

func Open
The returned DB is safe for concurrent use by multiple goroutines and maintains its own pool of idle connections. Thus, the Open function should be called just once. It is rarely necessary to close a DB.

按照GoDoc的意思,可以不必Close,go会自动管理连接池,在goroutine之间重用,并且Open只需要调用一次。

如果有什么不对的地方还请各位指正,本人也在学习中……

回复了 sky123 创建的主题: golang其实不适合做web开发

我看了一下楼主最近提出的三个问题,然后我决定以后自动Pass掉楼主发的任何帖子,并非针对谁,楼主莫怪 o(∩_∩)o


_

回复了 imjingoudan 创建的主题: 新人请教一个问题

没有,那道题确实是没有描述清楚想做什么……
其实就是想考考Slice的append用法,以及二维Slice的用法

回复了 imjingoudan 创建的主题: 新人请教一个问题

刚刚花了两分钟写的,说实话我也没看懂那堆(x+y)/2、x*y 和 x^y 有什么用,不过大致是这么个意思……
画出来是个渐变效果,还是很神奇的……
哈哈哈

package main

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
    result := make([][]uint8 , 0)
    for i:=0;i<dy;i++{
        result = append(result , make([]uint8 , 0))
        for n:=0;n<dx;n++{
            result[i] = append(result[i] ,uint8((i+n)/2)) //(i+n)/2就是题目中的(x+y)/2,可以按题目的要求换成i*n,和i^n试试
        }
    }

    return result
}

func main() {
    pic.Show(Pic)
}

效果如下:

x + y
(i + n)/2

x * y
i * n

x ^ y
i ^ n

x - y
i - n