给定一个构造函数,如
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) 实际上我们正在使用ejabberd服务器作为我们客户的聊天应用程序之一.除了群聊之外,一切都很顺利.
我们正在使用MUC进行群聊,但是当用户离线时,它不会向会员发送消息.是否有任何替代插件或我们可以使其工作的东西?
或者,任何人都可以建议如何从群聊历史记录中接收该用户的离线消息.
提前致谢
有时,使用git-bash时使用git-bash比使用TortoiseGit更容易获取有关git的信息.因此,我想对非常具体的问题使用git-bash(例如,同时创建分支/签出并提交未经注释的更改).
git checkout -b my_new_branch
git commit
Run Code Online (Sandbox Code Playgroud)
之后我可以毫无问题地使用TortoiseGit吗?反之亦然?
我在阅读存档的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)
你有什么建议吗 ?
我有一片,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) 我之前从未使用过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) 我在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函数的大小应该很小,最好处理一个功能,但似乎需要创建很多项目并且很难管理.我理解正确吗?
我正在尝试检查 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 的经验很少,并且被这个看似小问题困扰。
我以正确的方式处理这件事吗?如果是这样,我该如何克服这些问题?
该代码:
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中使用这种情况......
我在vim中遇到的最大瓶颈是我需要编写提交的那一刻.通常,我不记得差异.首先我写"git diff".然后我写"git commit"但是,......"嘿!我不记得了......".因此,我需要停止写提交消息,然后我回来并运行diff消息.有时我使用两个窗口:在左边我运行"git diff".在右边我运行"git commit".这允许我写一个提交消息完成,而我可以看到每个文件的差异,...等等.
有人可以帮助我在vim工作流程中改善这一时刻吗?
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