Go中的歧义转换语法

我有以下类型定义: type reader io.Reader 我希望这种读卡器类型能够实现io.reader接口,因此: func (r reader) Read(p []byte) (n int, err error) { return io.Reader(r).Read(p) } 问题在于:io.Readerr可能意味着两件事之一: 将r转换为其基础类型io.Reader 由于我们已经定义了一个Read[]byte int,error方法,所以编译器静态检查Assert r是否

Go 如何使用接口{}作为通配符类型?

场景是通过公共字段传递类似的结构,并将其设置为作为参数传递的值: package main type A struct { Status int } type B struct { id string Status int } // It's okay to pass by value because content is only used inside this func foo(v interface{}, status int) { swit

Go 合并两个关闭通道

有两个通道将用于通过关闭它们发出信号。如果至少有一个通道关闭,如何从这些通道中创建一个将关闭的通道。这段代码说明了我想做什么: func MergeChans(c1 chan struct{}, c2 chan struct{}) chan struct{} { c3 := make(chan struct{}) go func() { select { case <-c1: close(c3) case <-c2: c

Go频道不适用于生产商/消费者样品

我刚刚在Mac上安装了Go,下面是代码 package main import ( "fmt" "time" ) func Product(ch chan<- int) { for i := 0; i < 100; i++ { fmt.Println("Product:", i) ch <- i } } func Consumer(ch <-chan int) { for i := 0; i &

在goroutine中使用sleep等待主线程

编写了这个非常基本的代码来理解通道 如果一个goroutine中有一个等待,为什么主goroutine在等待它呢?我读到主goroutine需要等待一段时间,因为在调用goroutine之后,控件会立即传递回主goroutine 为什么Goroutine的设计不像java中的主线程和子线程那样可以并行运行 我想你的主要线索是在等待来自频道的消息 func main() { channel := make(chan int) go func() { time.Sle

无法使用Golang从gorilla/sessions和mySQL后端获取价值

我正试图在gorilla会话中使用mySQL后端为我的模型保存一个结构,但当我试图检索它时,venueID只得到0。我在保存和获取flash消息方面没有问题。我的目标是在会话中保存模型结构并检索它,以在编辑、更新和删除函数中获得id号 这是我的密码: type appResource struct { tmpl *template.Template // net/http store *mysqlstore.MySQLStore db *sql.DB // dat

Go 无法从通道获取值

我在通道中插入一些值。之后,我试图把它从通道中取出,但并没有得到任何值并退出。有人知道为什么吗 package main import ( "fmt" ) func main() { c := make( chan string) for _, s := range []string{"A", "B", "C"} { fmt.Println( "input : ", s) go func() { c <- s

Go 多数据库驱动程序场景:将接口作为类型传递

场景:我有一个数据库类型实现了许多CRUD操作 我想: 抽象出数据库层以支持多个数据库 在其前面放置一个高速缓存层作为直通式高速缓存 所以我的想法是: 为postgres特定代码和缓存创建数据库接口 将postgres类型传递给缓存构造函数,以便它可以使用它从数据库中删除 有关我尝试的内容,请参见下面的内容,在分配时导致cacheNew出错: 无法将接口{}类型的dbdriver变量用作struct literal中的数据库值:缺少方法GetUser 解决这个问题的最好办法是什么 package

Go 有人能解释一下互斥锁中的“不变量”一词吗?

我已经读了Addison Wesley的书《Go编程语言》好几次了,但在第9章265页,其中谈到sync.Mutex时,我还是遇到了一些问题 它说: Go的互斥体不可重入是有充分理由的。互斥锁的目的是确保共享变量的某些不变量在程序执行期间保持在临界点。不变量之一是不存在访问共享变量的goroutine,但是互斥锁所保护的数据结构可能有其他特定的不变量。当goroutine获取互斥锁时,它可能会假定invirants持有互斥锁。当它持有锁时,它可能会更新共享变量,从而临时违反不变量。但是,当它释放

Go语言是否有函数/方法重载?

我正在移植一个C库。C函数(带varargs)的定义如下: curl_easy_setopt(CURL *curl, CURLoption option, ...); func (e *Easy)SetOption(option Option, param string) { e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(param))) } func (e

如何在Go中清除终端屏幕?

在运行GO脚本时,Golang中是否有任何标准方法来清除终端屏幕?或者我必须使用其他库?据报道,您可以使用以下三行来清除屏幕: c := exec.Command("clear") c.Stdout = os.Stdout c.Run() 别忘了导入“os”和“os/exec”。您可以使用: 但您应该知道,对于这样的任务,没有防弹的跨平台解决方案。您应该检查平台(Windows/UNIX)并使用cls/清除或转义码。注意:运行命令清除屏幕不是一种安全的方法。在这里检查其他答案 您必须为每个不

golang中最灵活的函数签名

我的代码中有对象初始化器,它显式初始化对象的每个字段。但在我的例子中,大多数参数都有合理的默认值,我想使用它们 在Python中,我通常使用关键字参数或默认值的组合,并且我的\uuuu init\uuuu方法包含一些验证逻辑,因此我可以在对象初始化中使用零配置原则。例如: class Foo: """This class designed to show zero configuration principle in action""" def __init__(self

Go:使用地图数组创建地图

我正在尝试使用包含贴图的数组创建贴图。我的代码: 去: 这有什么问题?这可能吗 没有方括号 始终在行尾加逗号 谢谢我实际上试图从flickr api json响应中获取一个值。结果如下:{“照片”:{“页面”:1,“页面”:“107553”,“照片”:[{“id”:“15035296541”,“所有者”:”51816274@N05“,}]}。如何访问id?如下所示:结果[“照片”][“照片”][0][“id”]谢谢。当我这样做时,我会收到一个紧急错误,说索引超出范围。我做了:res:=mak

由于goroutine的原因,main即将退出

我正在尝试重新实现/修改的第二条注释的代码 我想要多个go例程从堆栈中弹出元素(只要堆栈包含某些内容),并使用另一个函数捕获它们 func-pop(列表*[]int,c-chan int){ 如果len(*list)!=0{ 结果:=(*列表)[0] *列表=(*list)[1:] fmt.Println(“即将发送”,结果) 如果给定零参数,cScan将不会阻塞 请注意,即使您给它一个参数,代码也不会阻塞IO var i int fmt.Scan(&i) 此外,如果您检查它返回的错

Golang Goji:如何同时提供静态内容和api

我已经和Golang玩了两个星期,终于可以做一个真正的应用程序了。它使用NGINX提供的静态HTML文件,API使用gojiweb框架作为后端。我不使用任何Golang模板,因为一切都是Angular.Js,所以静态适合我的需要 我希望可以选择是在生产环境中使用NGINX,还是使用应用程序使用的相同端口(8000)在根目录下提供静态内容。这样,开发环境就不需要安装NGINX 因此,尝试向默认mux添加一个句柄,如下所示 goji.DefaultMux.Handle("/*", serveStat

Go 使用编译器技巧

我在一篇演讲中读到,Go编译器将积极删除输出二进制文件中未使用的代码。我找不到的谈话用它来添加一些对测试有用的代码。有没有人有更多关于这是如何工作的信息?有关于高级测试技术的讨论吗?戴夫·切尼在他的基准博客文章中谈到了这一点: 关于编译器优化的注记 死码消除 func Test() bool { return false } func Expensive() { if Test() { // something expensive } } 在本例中,尽管函数测试总是返回

Go 分配了大量数据块的巨大GC性能问题

我刚刚注意到,如果我在程序中分配一个巨大的内存块。GC将吃掉所有程序时间 这是POC 我认为GC试图以某种方式移动巨大的内存块,实际上是否有可能从GC中分配内存,但将GC留给所有其他库,因为即使ReadLine也需要它 下面是使用内存块进行的评测 Total: 1445 samples 428 29.6% 29.6% 722 50.0% runtime.sweepone 375 26.0% 55.6% 375 26.0% markroot

使用分块的'http.GET'和Goamz'multi.PutAll上载Golang multipart`

我正在使用Goamz包,需要一些帮助来获取bucket.Multi以流式传输HTTP GET响应到S3 我将通过分块HTTP下载一个2+GB的文件,我想将它直接流到一个S3存储桶中 似乎我需要用一些东西包装响应体,这样我就可以将s3.ReaderAtSeeker的实现传递给multi.PutAll // set up s3 auth, _ := aws.EnvAuth() s3Con := s3.New(auth, aws.USEast) bucket := s3Con.Bucket("buck

Go 在错误方法中由fmt.Sprint(e)产生的无限循环

根据fortyforty对以下内容的回复: fmt.Sprint(e)将调用e.Error() 字符串。如果Error()方法调用fmt.Sprint(e),则 程序递归,直到内存不足 您可以通过将e转换为不带 字符串或错误方法 这仍然让我感到困惑。为什么fmt.Sprint(e)调用e.Error()而不是String()?我尝试使用Stringer接口,这是我的代码: package main import ( "fmt" "math" ) type NegativeSqrt f

Golang和从Mongo对象创建用于Elasticsearch的嵌套索引

我在学咕噜。我正在尝试将Mongo中的嵌套对象索引到嵌套索引Elasticsearch中 对于Mongo对象,我创建了两个结构: type Parent struct { Client_Mac string Visit NestedVisit `json:"visits" elastic:"type:nested"` } type NestedVisit struct { Last_Seen time.Time `json:"last_seen" el

golang中的int16数字加浮点数64

我想做一件简单的事: func (this *ScoreProvider) getScore()(res float64) { var score1 int16 = 500 var score2 int16 = 400 var score3 int16 = 300 var score4 int16 = 200 res = score1 * 0.25 + score2 * 0.25 + score3 * 0.25 + score4 * 0.25 r

Golang是否在虚拟机上运行?

对于一些非常简单的Golang代码: package main import "fmt" func plus( a int, b int) int { return a+b } func plusPlus(a,b,c int) int { return a +b + c } func main() { ptr := plus ptr2 := plusPlus fmt.Println(ptr) fmt.Println(ptr2) }

Go 如何设置;“文件版本”;EXE文件的PE头中的字段?

我使用go build构建一个exe文件。然后我查看文件的属性(右键单击文件->属性),在详细信息选项卡中,文件的版本为空 如何设置exe文件的版本 EXE文件版本和其他信息作为资源嵌入,这些资源特定于Windows,因此Go编译器不支持。您可以使用来完成此操作(它还支持嵌入图标)。我自己还没有尝试过,但它看起来很有前途,而且有很好的文档记录。有一个工具可以让您在开始构建之前或之后执行此操作 运行go安装github.com/tc-hib/go-winres@latest来安装它。 然后,在项目

Go 如何将exe文件作为窗口服务运行?

我想将exe文件作为窗口服务运行 是否有任何golang开源或任何golangapi可以做到这一点 谢谢 请阅读此处的文档: 然后使用 func Run(name string, handler Handler) error 开始吧 在我链接的页面上,还有很多其他功能对您很有用,所以您一定要看看。您可以使用运行外部命令的exec软件包, 例如: import "os/exec" cmd := exec.Command("your_exe_file") if err := cmd.Start(

是否可以在Golang中创建类型泛型(模板)函数

我是新手-只是在玩它-但我已经编写了一个命令行工具-我调用了大约30个不同的函数返回x,err。在任何情况下——我想做的只是在出现错误时惊慌失措——基本上一切都很正常,或者整个事情都失败了 我知道有template.Must(t template*,err Error)template*-我知道我可以进行检查(something interface{},err Error)interface{}-但要使用它,我必须进行类型转换,这很讨厌 有没有可能生成一种泛型函数panicIfError,这样我

Chdir(“/tmp”)在Go中工作异常

我用的是Macbook。 我尝试使用os.Chdir/tmp,但结果是/private/tmp。以下是我的代码: package main import ( "fmt" "os" ) func main() { s, _ := os.Getwd() fmt.Println(s) if err := os.Chdir("/tmp"); err != nil { panic(err) } s, _ = os.Getwd() fmt.Println(s)

Go 函数/常量/变量是否应导出到“package main”中?

我正在开发一个只有一个包的main。好了,对于小型Golang二进制项目的最佳实践是拥有所有代码,所以这就是我所做的 奇怪的是,在包main中,保持函数/常量/变量导出(MyFunction)或未导出(MyFunction)是最佳做法吗?真的没关系main包无法导入,因此您是否导出它们在这方面并不重要 然而,如果您确实导出了它们,那么像golint这样的工具将鼓励您记录它们,因此这可能是继续导出它们的一个很好的理由。真的没关系main包无法导入,因此您是否导出它们在这方面并不重要 但是,如果您确

我可以添加带有Go标志的命令吗?

我知道我可以这样定义标志: initPtr := flag.String("init", "config.json", "Initialize with config filename") myapp --init=myconfig.json 我会这样称呼它: initPtr := flag.String("init", "config.json", "Initialize with config filename") myapp --init=myconfig.json 我想知道我是否

Go 我是否应该将缓存数据保留在Web应用程序的内存中?

我有一个保存产品的数据库 还有一个类别列表 每种产品都属于一个类别 当产品列表更新时,我运行一个函数updateProductsCategories(),该函数查询数据库,计算每个类别中的产品数量,并返回如下列表: Food: 20 Drinks: 74 Jackets: 15 我在网页侧边栏中使用此列表以链接的形式显示类别以及其中的产品数量 我的假设是,当产品发生变化时,我应该按原样运行updateProductsCategories(),但不是每次加载页面时都调用它,而是将其结果

Go 为什么nsqlookupd包使用上下文?

当我阅读nsq源代码中的nsqlookupd部分时,我发现作者使用了一个上下文结构来包装nsqlookupd结构,而没有其他函数用于上下文。我不知道我们为什么这样使用它,通过这种方式我们可以得到什么好处?下面是源代码。谢谢大家! 上下文。开始 type Context struct { nsqlookupd *NSQLookupd } nsqlookupd.go func (l *NSQLookupd) Main() { ctx := &Context{l} tcpListe

可执行文件不在path-GO中

我试图为命令提示符调用一个内置命令,但遇到了我不理解的错误 func main() { cmd := exec.Command("del", "C:\trial\now.txt") // Reboot if needed cmd.Stdout = os.Stdout if err := cmd.Run(); err != nil { log.Fatal(err) } } 我得到了以下错误: exec: "del": executable file

golang exec osascript未调用

我编写了一个发送文本的命令,但它不起作用,即使我在其中粘贴了该命令。是否有语法错误或我缺少的东西 打印的命令是: /usr/bin/osascript-e'tell application“Messages”'-e'将mybuddy设置为对文本聊天id“iMessage;+;chatxxxxxxxxx”'-e'发送“test”到mybuddy'-e'结束tell' 我的代码是: command := fmt.Sprintf("/usr/bin/osascript -e 'tell applica

golang意外目录布局

所以我从github.com/minio/minio下载了minio 我想从源头上运行它 我创建的目录如下所示: ~/Downloads/minio-RELEASE.2017-06-13T19-01-01Z | src | all minio directories, including vendor, like the image below 我还使用godep解析GOPATH下的其他依赖项 现在我从Gogland(go IDE)运行它 它表明: GOROOT=/usr/l

Go 读取永久循环中两个通道的输出

我正在做树的练习。我已尝试实现与下面所述相同的功能 func Same(t1, t2 *tree.Tree) bool { ch1 := make(chan int) ch2 := make(chan int) go Walk(t1, ch1); go Walk(t2, ch2); for c := range ch1 { d := <- ch2 if c-d !=0 { return fal

Go 同时数树叶

我想用并发模型编写一个函数,以防输入太大,并行处理效率会更高,但它永远不会结束 假设有一个struct定义为: type Tree struct { Name string `json:"name"` SubTrees []*Tree `json:"subTrees,omitempty"` Leaves []string `json:"leaves"` } 我想编写一个函数,计算整个递归结构中叶的总数。这可以通过递归轻松完成: func (tree *

gomodule/redigo如何将多个键按到redis

我正在尝试将多个元素rpush到redis密钥。当前正在使用的redis池连接 若我尝试将数组放入rpush,则会推送一个连接了数组的字符串。我怎样才能推送单个元素呢 conn := Pool.Get() // A redigo redis pool arr := []string{"a", "b", "c", "d"} conn.Do("RPUSH","TEST","x","y") // This works conn.Do("RPUSH", "TEST", arr) //This does

如何通过CGO从C函数中的内部void*返回[]字节?

我使用以下定义包装C函数: int parser_shift(parser* parser, void* buffer, int length); func (p *Parser) Shift() []byte { var buffer []byte // TODO: return buffer } 它从未解析字节的内部缓冲区中删除最长的字节,并将它们存储在给定的缓冲区中 现在,我希望将其包装为具有以下定义的Go函数: int parser_shift(parser

Go 填充作为参数给定的接口类型片段(例如,为数据库/sql实现ScanAll)

我们如何实现一个函数,返回SQL查询产生的所有行,并将它们转换为接口数组dest(可能无法作为Scan)呢 我假设目标数组必须作为函数的参数提供。但是,我仍然不知道应该如何完成实施: func GetAll(query string, dest interface{}) error { rows, err := s.db.Query(query) if err != nil { return err } defer rows.Close() for rows.Ne

Go 与WaitGroup测试竞争条件时出现意外行为

我的任务是在围棋中模拟比赛条件。然而,我遇到了一个我无法解释的案例。下面的代码片段 package main import ( "fmt" "sync" ) var value, totalOps, totalIncOps, totalDecOps int func main() { fmt.Println("Total value: ", simulateRacing(10000)) fmt.Print("Total iterations: ", tota

Go 如何解析yaml并为interface-deep结构获取值

我正在尝试解析这个yaml,我想获得运行条目(test1或test2)的值,但没有成功,下面是我的工作示例 我有点迷路了地图里面的地图:(,, 这是我无法更改的yaml 你知道我怎么能得到这些价值观吗 package main import ( "fmt" "log" "gopkg.in/yaml.v2" ) var runContent = []byte(` version: "3.2" run-parameters: before: run-par

解释go wiki中的go接口定义

我理解一点,在一定程度上也理解接口(比如我如何用ruby打字) 但是阅读接口定义 我不知道我想表达什么 第一:我不明白这个评论 Go接口通常属于使用接口类型值的包,而不是实现这些值的包 第二:我不明白 不要在API的实现方定义接口“用于模拟”;相反,设计API以便可以使用实际实现的公共API对其进行测试 第三:我不明白这个例子 在使用接口之前不要定义接口:如果没有实际的使用示例,就很难看出接口是否必要,更不用说它应该包含哪些方法了 有人能用简单易懂的词解释一下上面的三件事吗?暂时忘掉与其他语言的

Go 我可以创建一个与另一个签名相同的函数吗?

我需要创建一个封装内部函数的函数,它与内部函数具有完全相同的签名。我担心这是不可能的,因为Go不支持泛型,但也许可以使用reflect?以下是我想要的伪围棋: func myFunc(a int, b string) (string, error) { return string(a) + b, nil } func wrapInner(inner interface{}) interface{} { argTypes := argsOf(inner) returnTy

Go 如何获取/打印数组指针片段的内容?

我有以下结构和功能: type RayTrace struct { gorm.Model Var1 float64 `json:"var1"` Var2 float64 `json:"var2"` Var3 float64 `json:"var3"` UserID uint `json:"user_id"` } ... // GetRaytracesFor function func GetRaytracesFor(id uint)

Go 无法使用';func(c容器)接口{}{return&;MyService{}}';(类型func(c容器)接口{})作为类型ContainerFunc

我试图理解如何构建一个服务容器。虽然这不是一个推荐的过程,但我还是想从中学习一些东西 但在构建了如下图所示的代码之后 我收到一条如下的错误消息 源代码: 封装单元 进口( “测试” “github.com/stretchr/authentic/assert” 框架“../../framework” ) 类型ContainerFunc func(容器容器)接口{} 类型MyService struct{ 名称字符串 } 类型Container framework.Container func T

如何在Go中对封送数据进行base64编码?

数据的类型为interface{},因此您如何知道dst的大小 marshalledJSON, _ := json.Marshal(data) dst := make([]byte, <length>) // what's <length>? base64.RawURLEncoding.Encode(dst, marshalledJSON) fmt.Println("dst:", dst) marshalledJSON,:=json.Marshal(数据) dst:=m

使用原始查询时如何检索golang go orm中最后插入的ID

我使用原始查询在MySQL中创建一个条目 db.Exec("INSERT STATEMENT") 我想在原生golang/sql包中检索最后一个ID,这很容易,但在GORM中我看不到任何东西 我知道使用db.Create可以解决我的问题,但我必须使用原始查询,而不是其他任何东西 func返回指向struct的指针 数据库结构: type DB struct { *Config Error error RowsAffected int64

Go 导入声明中的空行

我正在按照教程学习围棋语言。我不想盲目地复制这些例子,而是想了解发生了什么,我遇到了以下令人费解的情况: 在本报告中,进口声明的内容如下: import ( "fmt" "example.com/greetings" ) 我首先对两个字符串之间的空行感到惊讶,并认为这只是遵循了一些风格指南,在创建程序时,我将其简单地写成 import ( "fmt" "example.com/greetin

  1    2   3   4   5   6  ... 下一页 最后一页 共 356 页