草庐IT

go - 是否有将包拆分为模块化组件的标准做法?

我正在开发一个具有多层功能的库。我希望开发人员能够只导入他们需要的部分,即mylib-core、mylib-feature1、mylib-feature2等。每个人都生活在自己的git仓库中。我还想提供一个简单的mylib包,它公开了一组默认功能,这对库的新开发人员很有用。参见d3.js版本4+用于与我正在尝试完成的非常相似的事情。我遇到的问题是显然您不能在包之间共享包名。这是一个问题,因为最好导入所有需要的存储库,然后简单地在mylib名称下提供所有可用内容。我没有看到一个明显的方法来重新导出功能,以构建默认的mylib包。是否有好的解决方案或更惯用的方法来实现我的目标?

json - 如何在 Go 中导航具有未知结构的嵌套 json?

我正在尝试从GoLang中的深层嵌套json数据中解析和获取选定数据。我在浏览结构和访问数据时遇到问题。数据太深太复杂,无法使用Go中的先验已知结构进行解析。这是文件的URL:-https://www.data.gouv.fr/api/1/datasets/?format=csv&page=0&page_size=20我用map接口(interface)做了一些解析并使用了一个json字符串:resultdata:=map[string]interface{}json.Unmarshal([]byte(inputbytestring),&resultdata)//Inputstring

go - 被嵌入在golang结构中的接口(interface)所困惑

像这里的代码,当把一个接口(interface)A嵌入到结构体B中,然后将A设置为aa,aa是AA的一个实例。B和AA都有元素X,当调用b.X时我刚得到B.X。我怎样才能得到b.AA.X?我知道这个语法是有线的,但我只是想弄清楚varb是如何存储在内存中的,我尝试了一些不安全的语法,没办法得到b.A.X.:packagemainimport("fmt""unsafe")typeAinterface{Hello()string}typeBstruct{AXstring}typeAAstruct{numintXstring}func(aaAA)Hello()string{returnfmt

go - 如何捕获输出并将其发送到文件

我有一个执行某些处理的程序,我想提供将输出保存到文件的选项,但是,我找不到执行此操作的最佳方法。if(strings.ToLower(input2)=="y")||(strings.ToLower(input2)=="yes"){fmt.Println("\nOutputtingtofile,pleasewait...")oldSt:=os.Stdout//CreatebackupofoldStdoutnewFil,_:=os.Create(input+"txt")os.Stdout=newFiltable.Render()os.Stdout=oldStfmt.Println("\nC

go - 获取外部/父结构名称

我正面临一个Golang初学者问题,我不知道如何正确解决它。你能帮帮我吗?信息:尽管这违背了Go的概念(不是试图成为一种OOP语言),但我仍然想讨论一些解决方案。我想知道接收器/子结构中的外部/父结构名称。请查看以下代码(Playground:https://play.golang.org/p/h6dARJQwidS)packagemainimport("fmt""reflect")typeParentstruct{Iduint32}func(p*Parent)GetStructName()string{returnreflect.TypeOf(p).Elem().Name()}typ

go - 通过golang程序启动杀进程

我有一个正在运行的守护进程,它启动了另一个进程。为了现在模拟它,我刚刚设置了“sleep”。如果我终止进程,它仍然是僵尸。如何正确清洁它。cmd:=exec.Command("sleep","500")err:=cmd.Start()iferr!=nil{log.Fatal(err)}iferr:=cmd.Process.Kill();err!=nil{log.Fatal("failedtokillprocess:",err)}time.Sleep(10000000*time.Millisecond)$ps辅助|grepsleep373420.00.042769841040s000S+

go - 解释方法表达式的打印值

以下代码试图显示与结构关联的方法的地址。packagemainimport("fmt""reflect")typeIIinterface{Callme()}typeStrstruct{IintSstring}func(s*Str)Callme(){fmt.Println("itisme")}funcmain(){s0:=&Str{}t:=reflect.TypeOf(s0)v:=reflect.ValueOf(s0)fmt.Println("Callme",s0.Callme)//realaddress?fmt.Println(t.Method(0).Name,v.Method(0))

go - 为什么调用此 String() 方法而不按名称调用它

考虑以下代码。第一个函数是MessageStr类型的接收器方法。为什么fmt.Println(msgstr)执行第一个方法而不调用fmt.Println(msgstr.String())方法。还有为什么fmt.Println(msgint32)不执行第二种方法。packagemainimport("fmt")typeMessageStrstringtypeMessageInt32int32func(msgsMessageStr)String()string{returnstring(">")}func(msgiMessageInt32)Int32()int32{returnint32(

go - 在 goroutine 中等待主线程 sleep

编写这段非常基本的代码来理解channel。如果协程中有等待,为什么主协程在等待它?我读到主goroutine需要等待时间,因为在调用goroutine后控制权会立即传回给它。为什么goroutine不像java中的主线程和子线程那样可以并行运行?funcmain(){channel:=make(chanint)gofunc(){time.Sleep(3*time.Second)}()for{fmt.Println("../"); 最佳答案 我认为你的主线程正在等待来自channel的东西funcmain(){channel:=ma

Go test <function> 返回 undefined : <function>

尝试运行“gotestsum_test.go”返回错误:./sum_test.go:18:13:未定义:SumInt8FAIL命令行参数[构建失败]我正在学习golang入门类(class)。我们的老师分发了一个代码文件sum.go和一个测试文件sum_test.go。尝试在sum_test.go上运行“gotest”会返回上述错误。代码在我们老师的mac上运行良好,但他在重现问题时遇到了困难。这是我的环境设置:https://pastebin.com/HcuNVcAF求和packagesumfuncSumInt8(a,bint8)int8{returna+b}funcSumFloat