小编kos*_*tix的帖子

"构造函数"函数应该返回错误还是空值?

给定一个构造函数,如

func NewSomething(name, color string) *Something {
    s := Something{name, color}
    return &s
}
Run Code Online (Sandbox Code Playgroud)

此功能是否应包括健全性检查,例如&name == nil,或len(name) == 0?如果此函数应包含完整性检查,那么应从构造函数返回什么值?一个nil值,还是一个错误(errors.New(...))?下面是一个例子.

func NewSomething(name, color string) *Something {
    if &name == nil || len(name) == 0 {
        return nil
    }

    if &color== nil || len(color) == 0 {
        return nil
    }

    s := Something{name, color}
    return &s
}
Run Code Online (Sandbox Code Playgroud)

go

9
推荐指数
1
解决办法
2034
查看次数

在多用户聊天中向离线用户发送消息(ejabberd)

实际上我们正在使用ejabberd服务器作为我们客户的聊天应用程序之一.除了群聊之外,一切都很顺利.

我们正在使用MUC进行群聊,但是当用户离线时,它不会向会员发送消息.是否有任何替代插件或我们可以使其工作的东西?

或者,任何人都可以建议如何从群聊历史记录中接收该用户的离线消息.

提前致谢

chat xmpp ejabberd

8
推荐指数
1
解决办法
8503
查看次数

我可以同时使用命令行Git工具和TortoiseGit吗?

有时,使用git-bash时使用git-bash比使用TortoiseGit更容易获取有关git的信息.因此,我想对非常具体的问题使用git-bash(例如,同时创建分支/签出并提交未经注释的更改).

git checkout -b my_new_branch
git commit
Run Code Online (Sandbox Code Playgroud)

之后我可以毫无问题地使用TortoiseGit吗?反之亦然?

git tortoisegit

8
推荐指数
1
解决办法
5721
查看次数

如何阅读gzip压缩文件?

我在阅读存档的CSV文件时遇到了一些问题.

所以我想使用csv包和gzip包,但我不知道如何组合它们.

gzip.Reader(p []bytes)csv.Reader()具有不同的签名.

这是我的读者功能:

func reader(filename string, c chan string) {
    fi, err := os.Open(filename)
    var r *bufio.Reader
    if err != nil {
        fmt.Println("%q",err)
        os.Exit(1)
    }

    fz, err := g.NewReader(fi)

    if err != nil {
        r = bufio.NewReader(fi)
    }else {
        r = bufio.NewReader(fz)
    }


    for {
        line, err := r.ReadString('\n')
        if err != nil {
            fmt.Println("done reading file")
            c <- "done"
            break
        }else{
            c <- fmt.Sprintf("%q",strings.Fields(line))
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

你有什么建议吗 ?

csv gzip go

8
推荐指数
1
解决办法
5917
查看次数

在Go中,如何检查(任何)指针类型的值?

我有一片,interface{}我需要检查这个片是否包含指针字段值.

澄清示例:

var str *string
s := "foo"
str = &s
var parms = []interface{}{"a",1233,"b",str}
index := getPointerIndex(parms)
fmt.Println(index) // should print 3
Run Code Online (Sandbox Code Playgroud)

reflection pointers go go-interface

8
推荐指数
1
解决办法
4809
查看次数

对MySQL DB进行动态SQL查询

我之前从未使用过golang和goql,所以我第一次阅读这些内容.我想做这样的事情:

if userId && gender && age
db.QueryRow("SELECT name FROM users WHERE userId=? AND gender=? AND age=?", userId,gender,age)
else if gender && age
db.QueryRow("SELECT name FROM users WHERE gender=? AND age=?", gender, age)
else if userId && gender
db.QueryRow("SELECT name FROM users WHERE userId=? AND gender=?", userId,gender)
else if userId && age
db.QueryRow("SELECT name FROM users WHERE userId=? AND age=?", userId, age)
else if gender
db.QueryRow("SELECT name FROM users WHERE gender=?", gender)
else if userId
db.QueryRow("SELECT name FROM users WHERE …
Run Code Online (Sandbox Code Playgroud)

mysql sql go

8
推荐指数
1
解决办法
3495
查看次数

Go程序的项目结构在AWS Lambda上运行

我在AWS Compute Blog中找到了以下代码示例:

package main

import (
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    return events.APIGatewayProxyResponse{
        StatusCode: 200,
        Body:       "Hello World",
    }, nil
}

func main() {
    lambda.Start(handler)
}
Run Code Online (Sandbox Code Playgroud)

由于lambda.Start只接受一个处理程序而Go程序的入口点是主函数,这是否意味着一个CodeStar项目只能由一个处理程序组成?

我理解lambda函数的大小应该很小,最好处理一个功能,但似乎需要创建很多项目并且很难管理.我理解正确吗?

go aws-lambda

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

如何检查 MongoDB 中是否存在密钥

我正在尝试检查 MongoDB 集合中是否存在某个键。基本上,我需要将字符串数组映射到特定的键。如果该键存在,我想通过添加新值来更新列表,否则创建一个具有初始值的新键(如果添加新键,则最初只会添加 1 个值)。

我在网上找到了一些例子,尽管我无法让它在本地工作。下面是我的代码(我使用的是官方 Go MongoDB 驱动程序):

key:= "some_key"
database := client.Database("dbName")
keysCollection := database.Collection("keys")
keysCollection.Find(nil, {key:{$exists:true}});
Run Code Online (Sandbox Code Playgroud)

我遇到了关于这个组件的两个问题{key: {$exists:true}}

  • invalid character U+0024 '$':当尝试检查是否key存在时, at {$exists:true},尽管这似乎是 MongoDB 文档支持检查键本身是否存在,而不检查映射到它的确切值
  • syntax error: unexpected {, expecting expression: 在 的开头{key: {$exists:true}},看起来我无法传递结构?

这是我第一次使用 MongoDB,我对 GoLang 的经验很少,并且被这个看似小问题困扰。

我以正确的方式处理这件事吗?如果是这样,我该如何克服这些问题?

go mongodb

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

Golang,Go:为什么指针使用星形运算符代替&

代码:

type ByteSlice []byte

func (p *ByteSlice) Append(data []byte) {
  slice := *p
  slice = append(slice, data...)
  *p = slice
}

func main() {
  x := ByteSlice{1, 2, 3}
  y := []byte{4, 5}
  x.Append(y)
  fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)

好吧,我理解为什么以及指针如何工作,但我总是想知道为什么我们使用*operator将指针传递给函数.

  • *ptr 是顺从ptr并返回指针ptr中保存的值.
  • &var 返回变量var的地址.

为什么我们不使用&ByteSlice指针传递函数?

我很迷惑.这个函数不是通过指针吗?

根据Go规范(http://golang.org/ref/spec#Pointer_types)

PointerType ="*"BaseType.

BaseType =类型.

这也让我感到困惑.为什么我们使用star(*)运算符来获取变量和解引用指针的指针?看起来我们不会&在C和Go中使用这种情况......

c pointers go

7
推荐指数
1
解决办法
4951
查看次数

在我编辑它时(如果使用Vim),如何使提交差异出现在提交消息中?

我在vim中遇到的最大瓶颈是我需要编写提交的那一刻.通常,我不记得差异.首先我写"git diff".然后我写"git commit"但是,......"嘿!我不记得了......".因此,我需要停止写提交消息,然后我回来并运行diff消息.有时我使用两个窗口:在左边我运行"git diff".在右边我运行"git commit".这允许我写一个提交消息完成,而我可以看到每个文件的差异,...等等.

有人可以帮助我在vim工作流程中改善这一时刻吗?

git vim

7
推荐指数
1
解决办法
134
查看次数

标签 统计

go ×7

git ×2

pointers ×2

aws-lambda ×1

c ×1

chat ×1

csv ×1

ejabberd ×1

go-interface ×1

gzip ×1

mongodb ×1

mysql ×1

reflection ×1

sql ×1

tortoisegit ×1

vim ×1

xmpp ×1