Go “什么是”呢;“围棋之旅”;想说什么?

如果你不知道,我想教程中有几点会让你自己没有任何线索或链接。所以我很抱歉这些的长度: 我猜整数的位数应该小于常量 提到的是哪种语言 为什么我们需要单词type和单词struct?我该期待什么呢 为什么在构造函数中隐式使用零?这听起来像是一个危险的设计选择。在这件事上有没有打气或者其他什么 Make?有施工人员吗?new和make之间有什么区别 delete从何而来?我没有导入它 %v格式化程序代表什么?价值 我想我不知怎么搞砸了 package main impo

简单的golang IRC机器人保持超时

我正在修补golang,我的第一个代码是一个简单的IRC机器人,代码如下: package main import ("net" "log" "bufio" "fmt" "net/textproto" ) type Bot struct{ server string port string nick string user string c

导入前缀golang?

据我所知,golang导入了如下模块 import ( "bitbucket.org/user/project" "github.com/user/project" ) 是否有一种方法可以从导入所有文件中的模块,而无需显式键入绝对远程位置 1) 单个远程位置 2) 多个地点 对于1),您可以指定主机为github.com/user的位置,任何不是默认库且没有远程前缀的导入都以github.com/user作为前缀。或者有一个前缀\变量+相对/路径,并且能够在某处设置前缀\变量 很像 /

如何在Go中表示货币?

在围棋中存储和计算货币的正确方法是什么?似乎没有对应的十进制类型,使用浮点是一个很大的问题。我想说的一种方法是使用大小合适的整数类型存储货币量,将其标准化为尽可能低的金额。比如说,如果你需要将美元金额存储到1美分,将你的值乘以100,然后将它们存储到整美分 另一种方法是实现一个自定义类型,该类型将对其他一些语言中的“decimal”进行建模,也就是说,它将使用两个整数来表示货币量。实际上实现了一个decimal类型,尽管它们之间没有明确的领导者。对于表示货币价值,有理数是一个很好的解决方案。也就

Go 如何以图形方式可视化配置文件?

我正在Windows 8.1 64位上开发Go 1.2。要让go-pprof工具正常工作,我遇到了很多问题,比如显示内存地址而不是实际的函数名 然而,我发现它似乎在生成配置文件方面做得很好,它与pprof工具一起工作。我的问题是,如何使用这些配置文件进行图形可视化 U可以尝试go-tool-pprof/path/to/profile.prof来解决函数不正确的问题 如果您想要图形可视化,请尝试在pprof中输入web。如果您的目标是看到漂亮但基本上没有意义的图片,请按照@Specode的建议进行

将字符串作为参数提供给%09d时,golang出现sprintf错误

为什么这没有给出一个编译错误,是golang中的bug还是我遗漏了什么 intPadded := fmt.Sprintf("%09d", "i am a string" ) fmt.Println("bah" + intPadded) 当执行时,它给出 bah%!d(string=i am a string) “如果为动词提供了无效参数,例如为%d提供字符串,则生成的字符串将包含问题的描述”“per” 它不会给出编译时错误,因为没有编译时错误fmt.Sprintf()定义为将…接口{}作为其

Go 可执行文件(“main”包)中的公共名称

据我所知,在导入包时,将导出(公共)大写的名称。但是,由于可执行文件(“main”包)是运行的,而不是由其他包导入的,所以名称是否为公共名称有什么区别?作为一个原则问题,我应该把所有的名字都保密吗?简单的回答是:没关系。可能在程序集级别上有一个公开的指针;但是,它还没有被说明 事实上,关于godoc和公函(大写)的评论是错误的。对于可执行文件(包主),godoc仅打印包的//头描述。它不会打印任何方法。我最近试过这个,想知道我所有的文档都在哪里 相反,人们对package main应用程序所做的

Go 为什么json.Marshal和json.Unmarshal有不同的签名

请注意,封送接受接口并返回一个[]字节作为输出,而解封接受一个[]字节并将输出直接写入输入参数数据 是什么让设计与众不同 一个相关问题: 我认为use input参数可以在内存中保存一次副本(函数返回需要一个副本),golang中的每个赋值都是一个副本操作,所以看起来解组可以保存一个副本,但封送不能 所以我很困惑…通过让封送返回一个字节数组,您可以轻松地将其传递给以字节数组为参数的函数。在编写服务JSON的web服务时,您可能会遇到这样的问题 如果您使用的是Unmarshal,那么很可能是从JS

Go 如何在Openshift上部署revel web app?

我试图在互联网上搜索一些指南,但实际上无法在Openshift上成功部署revel应用程序。我想知道为什么没有任何指导来逐步在revel group或任何相关应用程序上部署revel应用程序。任何曾经部署过它的人,请帮我一把。Openshift并不正式支持Go,但有各种第三方解决方案,比如这一个:,尽管其中一些似乎有点过时。你试过哪一个?如果这些应用程序与香草围棋应用程序配合使用,它们应该与使用revel框架的应用程序配合使用。我想我会选择Openshift上的围棋应用程序,因为revel的一些

Go 戈兰的夏令时

我一直在为调度界面设计一个用户界面,用户可以在该界面中设置未来数小时的计时器。如果可能的话,我希望能够处理夏令时,我认为这将是非常简单的。在检查golang包中的time.time时,我遇到了以下不一致的情况,如果是这样的话 package main import ( "fmt" "time" ) func main(){ const timeFormat = "2 Jan, 2006 3:04pm (MST)" test , err :=

Go 陷入围棋并发

我似乎不知道下一步该怎么办。我的目标是使用image包中的SubImage函数从原始图像创建一个包含所有子图像的数组。我能够在imageSplit()函数中分割图像,并通过通道传递给imageReceiver()函数 实际上,我在函数imageReceiver()中接收到数据,但我不知道如何在从imageSplit()函数接收所有图像后附加到数组并使用它 // Partitions Image func Partition(src image.Image) []image.Image {

为什么字节数组的Golang对象属性在分配给另一个变量时会被擦除

我们需要在使用后删除一些变量。但是,当在结构中为它分配一个[]字节字段时,它看起来真的很奇怪 为什么[]字节的赋值不是副本而是指针 我应该怎么做才能将值保留在structa.bs中,但将b作为局部变量删除? 切片本质上是引用的东西。分配一个不会复制其内容。可以将切片值视为“切片头”结构,其中包含指向切片底层数组的指针以及数组中切片的偏移量和长度。复制切片时复制的是此结构,而不是数组中的任何值 你能行 b := make([]byte, len(a.bs))) copy(b, a.bs) 制作

Go 驼鹿支架

麋鹿堆叠被大量使用,但cAdvisor仅支持XDB。所以我想实现一个基于Lumberjack协议的日志存储转发驱动器 我认为cAdvisor可以将度量数据转发到LogStash 所以我打算做这个,但我真的不知道如何开始编码 我已经在ElasticSearch中实现了存储度量数据 请看

Go 使用exec.Cmd.Run()运行命令时,如何获取所有输出行?

我正在使用管理项目的依赖关系。我为我创建了一个脚本,它运行go test$(glide novendor)(它测试所有目录,不包括供应商/一个目录)。运行命令时,其输出不会超出第1行: ok my/project/scripts 0.005s 以下是运行该脚本的脚本部分: //获取要测试的路径(不包括“vendor/”目录) cmd:=exec.Command(“glide”、“novendo”) var输出字节。缓冲区 cmd.Stdout=&out err=cmd.Run() 如果出错!=零

Go 将管柱铸造成最合适的类型

我知道,使用strconv包,可以将字符串解析为所需的任何类型。然而,对于我正在编写的程序,我不知道在运行时需要解析的变量的最佳类型。有没有比我现有的更好的方法?(我的代码很难看,很糟糕,很糟糕。我真的想找到一个更好的解决方案。) 相关代码 编辑:使用对象类型会阻止我使用其类型中的返回值,因此也需要这样做。edit 最初的示例是正确的,但没有那么大的帮助,并且它不满足OP的要求。我已经更新了答案,使它在给定的上下文中工作。。。我希望这也能有所帮助 您可以返回接口{},然后打开返回类型,如下所示:

从控制台读取Unicode输入,而不是golang中的UTF-8(十六进制)

我试图在控制台中用bufio读取用户输入。文本可以有一些特殊字符(é,á,♫, ╬,...). 代码如下所示: reader := bufio.NewReader(os.Stdin) input, _ := reader.ReadString('\n') 如果我键入例如“é”,ReadString会将其读取为“c3 a9”而不是“00e9”。如何读取Unicode而不是UTF-8中输入的文本?我需要将此值用作哈希表键 谢谢,Unicode和utf8是不可比较的。字符串可以是Unicode和ut

使用GoLang安装命令行应用程序

我不确定这将如何工作,但我基本上是在尝试编写一个可以运行命令和子命令的命令行应用程序。我正在使用这个流行的第三方库解析命令行参数: 我的问题是我有一个项目文件夹,我的.go文件将保存在其中: MyProject 因此,即使在main.go文件中的代码中,使用它们的示例,我也有: package main import ( "fmt" "os" "github.com/urfave/cli" ) func main(

使用go构建多个二进制文件

我的项目结构如下: src/github.com/foo/bar/ - binary1 - binary1.go - binary2 - binary2.go 每个二进制文件都在一个包main中 当我在目录src/github.com/foo/bar中时,有没有办法运行go build并最终编译两个二进制文件 开始编译。/…未生成任何二进制文件。 go build-a实际上构建每个包 或者我应该称之为: (cd binary1; go build) (cd

在goroutine中使用指针接收器

我有一个指针接收器的方法,我想知道在这个方法中的goroutine中使用这个指针接收器是否安全?或者我应该将此指针接收器作为参数传递 例如: func (m *dummyStruct) doSomething { /* do a bunch of stuff */ go func() { m.a = x m.doSomethingElse() }() return y } 我知道将m作为参数传递给goroutine不会出错,但我想

Golang新内存分配

我已经开始在Go中编程,我想知道什么时候使用new(Object)它会将内存分配给该对象的大小,对吗?如果是这种情况,在使用完对象后如何释放内存 我问这个问题,因为在C++中,当代码 /代码>被用于一个对象时,您可以在代码“>代码>删除/代码>对象之后,不再需要存储对象。 我一直在搜索Go是否有删除>代码>或者类似于C++的东西,但是我一直找不到任何东西。 非常感谢您的帮助。Go有垃圾收集功能。这意味着Go运行时在后台检查对象或任何其他变量是否不再使用,如果是这种情况,则释放内存 另请参阅围棋常

Go httprouter.GET无法工作

我有一个html表单,它使用get方法提交数据 <!doctype html> <html> <head> <meta charset="UTF-8"> <title>Web Search</title> </head> <body> <form action="/search" method="get"> <label for="tags"&

Go 大量瞬态对象-避免争用

我有一个用Go编写的新TCP服务器,它连接了100多个客户端。每个客户机在通过无线电波查看来自不同位置的无线数据包时,需要集中查看数据流,然后对这些数据进行分析。代码可以工作,但是我看到了很多关于锁定的争用和CPU的增加,并且正在考虑如何尽可能避免锁定或优化锁定 当TCP服务器为接收到的每个数据包启动一个GoRoutine时,addMessage函数需要一定程度的同步。这些数据包还将在稍后的另一个函数中进行分析,该函数将在地图上进行RLock 正是每秒调用一次的cullMessages函数,它本

分析Go中的时间时出错,微秒数可变

我正在尝试将字符串解析为时间对象。问题是微秒术语中的位数发生了变化,这会中断解析。例如,这很好: package main import ( "fmt" "time" ) func main() { timeText := "2017-03-25T10:01:02.1234567Z" layout := "2006-01-02T15:04:05.0000000Z" t, _ := time.Parse(layout, timeText) fmt

Golang goroutine无限循环内存泄漏

我遇到了我的goroutine的奇怪行为(对于一个刚到golang的人来说): go func(...) { for { buffer := make([]byte, 1024) ... } } 它慢慢地吃掉公羊。我知道这是由于无休止地循环调用make;它只是每次分配新内存。但我不太明白为什么会这样: var buffer []byte for { buffer = make([]byte, 1024) ... } } …效

如何在Go中为行插入重用单个Postgres DB连接?

我正试图使用Go为从rabbitmq接收到的每个新消息在Postgres表中插入一行数据,使用一个到DB的连接,该连接在下面代码的init函数中打开 代码不是只打开一个连接,而是打开497并最大化,从而导致行插入停止 我已经尝试过在这些问题中使用这些信息,它们说我应该打开一个连接,并使用全局数据库来允许主函数将sql语句传递给在init函数中打开的连接 我以为我已经这样做了,但是每一行都会打开一个新的连接,所以一旦达到postgres连接限制,代码就会停止工作 我是新手,编程经验有限,在过去的两

如何将带参数的函数句柄传递给Go中的另一个函数?

我创建了一个scheduler()函数,它将在一个时间间隔内执行传递的函数 func scheduler(what func(), delay time.Duration) { fmt.Printf("Starting scheduled process on interval %d\n", delay) ticker := time.NewTicker(delay) quit := make(chan bool, 1) go func() { for {

Go 如何在运行时而不是编译时更改glog日志级别?

我正在使用,并希望在运行时更改标志stderrthreshold或V级日志记录,即不重新编译二进制文件并重新运行它。我搜索了一些资源,但所有的答案都是编译时的更改。由于我不想停止我的服务,运行时是否需要更改它?包从标志读取配置。您可以在运行时从代码中修改标志以更改glog的行为 主程序包 进口( “旗帜” “fmt” “github.com/golang/glog” ) func main(){ //glog需要flag.Parse()调用 flag.Parse() glog.Info(“默认级

elasticsearch 在Golang中使用Elasticsearch脚本字段

我试图使用scriptfield来计算DocumentResponse结构中的小计(小时*价格)。没有scriptfield,它可以正常工作 这都是基于这个例子 如果这是一个非常简单的错误,请不要感到惊讶,因为我对编码一无所知 我的猜测是,在解组响应时出现了一些问题 这些是有问题的结构: type DocumentResponse struct { ID string `json:"id"` CreatedAt time.T

Go 从文件和存储文件创建sha256的最佳模式

我正在编写一个Web服务器,它以多部分/formdata的形式接收上传文件。我正在根据请求生成文件sha256,但由于读取器接口的性质,我无法重复使用数据将文件上载到文件管理器。这些文件可以有几百个MBs。存储内容的最佳方式是什么?我可以复制内容,但我担心这会浪费内存资源 编辑 您可以使用并发地将数据发送到多个输出流,例如散列和一些远程写入程序 例如(大致): 请注意,io.Multiwriter可以容纳任意数量的写入程序,因此您可以同时计算额外的哈希值(例如md5、sha1等),甚至可以将文件

在GoLang中将字符串强制转换为func类型

我有一个字符串,它是GoLang中函数的名称。 我想把它们当作函数。我该怎么做?我试图通过反射来实现它。*但我没有找到一条适合我的目的的有效路径 我在JSON文件中获得处理程序的名称,并希望执行这些处理程序。大概是这样的: { "students/show" : "ShowStudents", "students/add" : "AddStudents" } b, err := ioutil.ReadFile(fname) mp := make(map[string]string) j

Go 是否需要在sync.Pool新函数中返回指针类型?

我在Github上看到了sync.Pool,它说sync.Pool应该只用于指针类型,例如: var TPool = sync.Pool{ New: func() interface{} { return new(T) }, } 这有意义吗?返回T{}怎么样?哪一个是更好的选择,为什么 没有必要。在大多数情况下,它应该是一个指针,因为您希望共享一个对象,而不是复制 在某些用例中,这可以是非指针类型,比如某个外部资源的id。我可以想象一个路径池,用字符串表示装载的磁

Go 如果通过os.exec运行,调用的程序将失败

我不确定这是被调用程序的问题还是我调用程序的方式导致的问题。因此,我从源代码开始 我需要从程序调用ssh(如果您对下面我将提到的原因感兴趣),但是ssh会以静默方式退出 当我调用ssh-v时user@remotehost从shell成功: 显示了stderr上需要的调试输出 有人问我密码 我可以看到远程主机外壳 但是当我在我的程序中做同样的事情时(myssh-vuser@remotehost只有这种情况才会发生: 有人问我密码 stderr上的调试输出既没有显示,也没有到达远程主机she

Gob解码无法解码寄存器类型后的接口

我定义了以下类型: func init() { gob.RegisterName("MyMessageHeader", MyMessageHeader{}) gob.RegisterName("OtherMsg", OtherMsg{}) } // // Messages // type MyMessageHeader struct { MessageId InstanceIdType OtherId uint64 } type MyMessage in

如何在go lang中获得矩阵的维数?

下面是一段代码: package main import ( "fmt" "gonum.org/v1/gonum/mat" ) func main() { // Matrix and Vector // Initialize a Matrix A row1 := []float64{1,2,3} row2 := []float64{4,5,6} row3 := []float64{7,8,9} row4 := []float64{10,11,12} A :=

Go 为什么我的append函数会将切片的每个成员都更改为要添加的新项?

我正在制作一个简单的素因子函数,它可以放置一个类似于 prime_factors_mult(315) => [[3,2],[5,1],[7,1]] 但是我得到的不是这个结果,而是[[7,1][7,1][7,1][7,1][7,1]],它后来被缩减为一个空片段,因为它们自己重复它们。我试图一步一步地查看它,它将所有值更改为最后一个附加。我应该做些什么来避免这种情况 func prime_factors_mult(x []int)(y [][]int){// Problem 36 i

Go 戈朗李白电话号码

我如何通过使用此库传递golang中的号码来获取国家代码: ?我一直在寻找的答案是如何通过只传递电话号码来获取国家代码,这是一个非常有效的解决方案 num, err := phonenumbers.Parse("+123456789", "") if err != nil { fmt.Println(err.Error()) } regionNumber := phonenumbers.GetRegionCodeForNumber(num) countryCode := phonen

Go 如何将*\u Ctype\u char转换为*\u Ctype\u uchar

我使用cgo调用动态库中的函数,其签名如下: int decompress(int, const uint8_t *, size_t, uint8_t *, size_t); 这是我的密码: // #include statements here import "C" import ( "unsafe" ) func Decompress(comp_type int, data string, expected_size int) []byte { compressedDat

Go 奇怪的切片行为

我正在尝试实现BFS算法来查找图中的所有路径(从src和dest)。我使用一个切片来模拟队列,但是当我在for循环中将多个元素追加到切片时,该切片会损坏(追加没有按预期工作)。我不知道为什么。我刚来高兰德 // GetPathsFromCache retrieve information from loaded jsons in the cache func (cache *ModelsDataCache) GetPathsFromCache(modelUrn, selectedElement,

Go 相同依赖项的两个版本-忽略较低版本

我有一个项目,其中两个依赖项使用同一库的不同版本。例如,我的项目有依赖项A和依赖项BA和B都使用公共库/依赖项X,但版本不同A拥有v1版本的X和B拥有v2版本的X。现在,当我在项目中添加A和B作为依赖项时,在项目的go.sum中有两个版本的X 我希望在运行时,A和B会引用相应的版本。但事实并非如此。不知何故,当我在我的项目上运行测试时,A正在使用X的v2,理想情况下它应该使用v1(因为在A的go.mod中,明确指定/添加了v1)。因此它中断了执行,因为X的v1和v2有很多差异 因此,在我的项目中

读取和解析golang中的xml文件,但未收到错误和;0“;印刷时的价值

我想读取XML并使用它在程序中创建逻辑。目前,我是新手,我能够从XML文件创建struct,但不知怎么的,我不知道如何打印值。稍后我想在程序中使用这个值作为变量。也请分享做这件事的技巧 下面是我正在使用的XML文件- <?xml version="1.0" encoding="UTF-8"?> <rules> <rule type="rule0"> <conditions> <priority>1</priority>

如何在子包中部署Go Google云功能?

我有以下设置,我正在尝试创建一个多功能GCP云功能项目,但由于一个“通用”错误,我无法部署任何功能,这根本没有什么帮助 我的项目结构是这样的,为了保持简单,我只写了function1,但是有一个function2,等等 使用云功能go 1.13支持和go mod支持 项目结构: . ├── go.mod ├── function1 │ └── function1.go ├── common │ └── common.go // Contains struct GCSEvent see h

Go 进程中断:信号:终止

我安装了一个名为watcher的实用程序 使用VS代码,它可以正常工作 但当我尝试在Goland(Jetbrains)使用它时,我得到了以下结果: watcher main.go --port 8080 2020/03/04 14:10:42 build started Building .... 2020/03/04 14:10:43 build completed Running ... 2020/03/04 14:10:43 process interrupted: signal: ki

Go 无法使用权限0777写入文件

我正在使用权限0777将文件写入unix上的磁盘,但是ls-la显示它有-rwxr-xr-x,这是不需要的 err = ioutil.WriteFile(path, jsonByte, 0777) if err != nil { log.Print(err) } 我希望得到-rwxrwx许可。我不明白为什么w权限缺失 首先,请确保这确实是一个新文件,因为在覆盖现有文件时,操作系统通常会保留现有权限(尽管细节是特定于操作系统的,尤其是) Unix/Linux文件

是否有方法返回实现结构而不是Go中的接口?

我想建立一个系统,可以扩展为不同的应用系统 在域包中,我有一个如下所示的接口: 主程序包 类型接口{ GetName()字符串 } 类型接口{ GetCards()[]卡接口 } 在应用程序包中,我有以下实现: 包实现 //实现CardInterface 类型卡结构{ 名称字符串 } func(c卡)GetName()字符串{ 返回c.名称 } 类型甲板结构{ 卡片 } func(d组)GetCards()[]卡接口{ 返回d.Cards[] } 但是它给出了一个错误,即不能返回[]Card

如何在golang中执行代理和TLS

我试图通过代理路由我的请求,并在TLS配置中发送cert.pem。下面的代码抛出此错误-proxyconnect tcp:tls:first记录看起来不像tls握手。当我将代理URL从https更改为HTTP时,同样的代码也可以工作。但是,带有https的代理URL在python中工作。下面是到目前为止我的代码 certs := x509.NewCertPool() pemFile, err := ioutil.ReadFile("cert.pem") if err != nil { r

Go 如何防止同步池创建两个实例

我正在实现一个TCP连接池,用于记录到fluent位,下面是代码 导入( “fmt” “日志” “净额” “同步” ) 类型FluentConnectionPool结构{ 同步互斥 池*sync.pool } func(fl*FluentConnectionPool)日志(消息字符串){ 弗洛克 延迟fl.Unlock() conn:=fl.pool.Get()(*net.TCPConn) 延迟fl.pool.Put(康涅狄格州) fmt.Printf(“使用:%v\n”,conn.LocalA

Go 从aws lambda返回指针

我正在研究一段代码,该代码使用go创建一个简单的lambda函数,调用该函数时返回一个伪值 package main import ( "github.com/aws/aws-lambda-go/lambda" ) type book struct { ISBN string `json:"isbn"` Title string `json:"title"` Author string `jso

使用多个并发tls拨号器,golang中的常驻内存不断增加

好吧,这已经困扰了我好几个星期了,我不知道我错过了什么,这个漏洞在哪里,或者它是否存在。我的工作量相当简单。获取URL列表,旋转一个goroutine池,从通道中提取URL,并使用tls.Dialer创建到它们的tls连接。下面是内存图的快照,显示了代码的持续上升和POC 我的猜测是,这与tls包完成的分配有关,因为它似乎只会爬升它连接到的更“成功”的URL。也就是说,如果它们中的大多数没有连接,我就看不到内存的稳定增长 以下是运行中途的输出结果: Showing nodes accountin

Go 围棋中的错误

我在一家拥有大型Go后端的公司开始了一份工作,几天前整个prod服务器因为SEG故障而崩溃。 这个错误很简单,只需要一个零检查。 来自其他语言(Java、Python、Rust等)的我发现,整个过程会因为如此简单和容易出错而失败,这让我感到非常惊讶 我的问题是:如何缓解这些问题?不仅是如何避免错误,而且如何将影响降至最低 到目前为止,我唯一的长期计划是关于更好的测试(例如引入基于属性的测试)和避免每次可能的指针。导致分段故障崩溃的错误通常可以在CI的linter和静态分析阶段或集成测试阶段被发现

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