草庐IT

go - go怎么写append "method"

我想探索Go的可能性。您将如何将“追加”转换为方法?简单地说:“st.app(t)==append(st,t)”这是我得到的:typeTinterface{}typeST[]interface{}func(st[]T)app(tT)[]T{return(append(st,t))}但是这段代码不检查类型兼容性:append([]int{1,2},"a")//correctlygiveserrorST{1,2}.app("a")//dumblygives[12a]!!!我知道为什么代码不检查类型兼容性,但正确的方法是什么?可能吗?感谢您帮助我理解Go的工作原理。

go - 调用接受 "chan interface{}"的函数

对于投票否决这个问题的人-它确实有一个合理的答案,那就是反射(reflection)(见下文)。我想创建一个通用函数,我可以将任何channel传递给它,它会告诉我它的容量有多少已满。我发现必须将channel转换为“chaninterface{}”很烦人。我的问题是,对于下面的函数foo,我可以向它传递一个字符串,这很好。Go接受它作为接口(interface){}。为什么它对channel的行为不同?我可以创建接受通用chan接口(interface){}的函数吗?functestFoo(){str:="anything"foo(str)//Thisisfine.aChan:=ma

go - 将 "net/http"上的 *Request 传递给 Golang 函数

是否可以将请求值传递给另一个函数?import"net/http"funcmain(){http.HandleFunc("saySomething",Say)}funcSay(responseWhttp.ResponseWriter,request*http.Request){name:=getName(request)//passingrequestvaluetoanotherfunction}funcgetName(requestsomeType)string{request.ParseForm()returnrequest.Form.Get("name")}

go - 如果我的 key 都被命名为 "Key",我如何从 BSON 获取 JSON?

我正在尝试从数据库中读取数据,然后将结果作为json返回给用户。发生的事情是我得到如下输出:[{"Key":"foo","Value":"bar"}]当我想得到:"{"foo":"bar"}"我如何获得前者?示例:(未显示从数据库读取并将Raw转换为字符串)packagemainimport("encoding/json""fmt""go.mongodb.org/mongo-driver/bson")funcmain(){vardata="{\"foo\":\"bar\"}"vartestInterfaceinterface{}e:=bson.UnmarshalExtJSON([]by

go - 我可以使用指向 "error"的指针来捕获返回错误吗?

我正在编写一些事务开始/提交/回滚函数,我想将block配对以防止忘记提交我是这样写的:func(foo*Foo)Bar()(errerror){foo.Begin()deferfoo.End(&err)//somebusinesscodereturn}func(foo*Foo)End(eptr*error){//ifrecoverifr:=recover();r!=nil{debug.PrintStack()*eptr=r.(error)}varerr=*eptriferr!=nil{foo.Rollback()}else{foo.Commit()}}它有效,但它使用“接口(inte

go - "go build"一个文件夹中的多个程序

我有functions/hello.go文件运行gobuild会在同一目录中创建新的二进制文件functions。我想在functions目录中有两个源文件:hello.go和hello2.go并且能够运行gobuild生成两个二进制文件:hello和hello2。如何实现? 最佳答案 Go包是按目录划分的。这意味着您在一个目录中只能有一个包,因此最多只能有一个“主”包。您尝试做的事情根本不可能*。您需要创建子目录:functions/hello/hello.gofunctions/hello2/hello2.go然后你可以这样构建

go - 如何在 Go 中保持 "package"状态?

我的目标是封装在一个模块/包中。主要包:packagemainimport("github.com/zenazn/goji""./routes")funcmain(){routes.Setup()goji.Serve()}还有另一个包:packageroutesimport"github.com/zenazn/goji"funcSetup(){goji.Get("/static",func(whttp.ResponseWriter,r*http.Request){fmt.Fprint(w,"static!")})}我该怎么做? 最佳答案

go - "func main"中的重复 "package main"是否错误,为什么错误?

请帮助我理解为什么“packagemain”中重复的“funcmain”是错误的。VC中的错误:“main在此block中重新声明”。//$tree//.//├──main.go//├──second.go//```gobuildmain.go```//or//```gobuild.```//file:main.gopackagemainimport("fmt")funcmain(){fmt.Println("thisisfileMAIN")}//file:second.gopackagemainimport("fmt")funcmain(){fmt.Println("thisisfi

go - 不能在 Go 中使用 "go"作为变量名

我觉得这有点奇怪,为什么这段代码不起作用?packagemainimport"fmt"funcmain(){vari,jint=1,2k:=3c,python,go:=true,false,falsefmt.Println(i,j,k,c,python,go)}抛出错误#command-line-arguments.\compile64.go:8:13:syntaxerror:unexpectedgo,expectingexpression.\compile64.go:10:29:syntaxerror:unexpectedgo,expectingexpression但这有效!pack

go - 自定义节拍运行错误: invalid duration "ns"

我正在研究一个自定义节拍,它解码一个二进制文件以提取数据并将其发送到elasticsearch,复杂化正常但是当我运行它时,它给我一个无效持续时间“ns”的运行时间错误这是我的代码:packagebeaterimport("fmt""io/ioutil""math""time"//"log""strconv""strings""github.com/elastic/beats/libbeat/beat""github.com/elastic/beats/libbeat/common""github.com/elastic/beats/libbeat/logp""github.com/e