草庐IT

bean默认名称

全部标签

go - 获取调用函数的名称和包

我需要知道调用函数的go-package和函数的名称(包括接收者名称)。这是我当前的代码:funcretrieveCallInfo(){pc,_,_,_:=runtime.Caller(1)funcName:=runtime.FuncForPC(pc).Name()lastDot:=strings.LastIndexByte(funcName,'.')fmt.Printf("Package:%s\n",funcName[:lastDot])fmt.Printf("Func:%s\n",funcName[lastDot+1:])}但是,代码的行为并不完全符合预期。//Whencalled

go - main包中类型struct的名称首字母大小写

所以如果没有导入的话应该是小写的。从主包中导入一些东西很奇怪。但是,根据其他语言的经验,对我来说使用小写字母作为结构/类的第一个看起来很奇怪。什么方式是惯用的? 最佳答案 这不是什么是惯用的问题,如果标识符以小写字母开头,则不会导出,因此只能从声明包(直接)访问,如果标识符以大写字母开头(Unicode类“Lu”),它是导出的,可以从任何包中引用。有关详细信息,请参阅Spec:Exportedidentifiers.这是一个我个人喜欢的设计决定(它保持源代码干净,“它们甚至具有语义效果:名称在包外的可见性取决于它的第一个字符是否大写

datetime - 在 Go 中,给定一个位置名称,我们如何确定该位置的当前时间?

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭7年前。Improvethisquestion我们不能使用Zone()返回的偏移量:packagemainimport"fmt"import"time"funcmain(){loc,_:=time.LoadLocation("America/Los_Angeles")t:=time.Date(2015,04,12,19,23,0,0,loc)t

file - 为什么我的 Go 程序使用打开文件的名称创建另一个 Go 进程,为什么它这么大?

我有一个大约2mb的大.json文件。我正在使用thiscode读取json,稍作修改:funcmain(){pages:=getPages()for{}for_,p:=rangepages{fmt.Println(p.toString())}如您所见,我设置了一个无限循环,这样我就可以让程序在读取进程的RAM大小时等待。当我去阅读它时,我发现有2个go程序在运行。我刚刚做了去运行myfile.go但后来我得到了2个二进制文件:一个名为go,另一个是文件名,没有json部分。go二进制文件大约有5mb,但是这个有36mb...为什么go使用文件名创建另一个进程?它是保存文件的地方以便我

go - 当非默认是输入 channel 时,为什么 select in go 总是进入默认情况?

我是编程新手。这是我的一段代码。我正在尝试为结构分配值并将该结构分配给channel。但它没有设置它并进入默认情况。packagemainimport("fmt")typeobjectstruct{aintbstring}funcmain(){o1:=object{a:25,b:"quack",}varocchanobjectselect{caseoc 最佳答案 您从未初始化occhannel,所以它是nil,并且在nilchannel上发送会永远阻塞。如果没有就绪的案例,select语句会选择default。您必须初始化chann

go - 如何隐藏golang中的默认类型构造函数?

我有这个问题的原因是我经常犯错误,我忘记为结构的字段指定一个值,然后编译器没问题,但零值会导致错误。这是一个例子。假设我在一个包中定义了一个Foo类型:packagetypestypeFoostruct{RequiredField1stringRequiredField2string}它是公开的并且有2个字段,我希望在创建Foo结构时指定它们。然后我可以像这样在我的主要功能中导入和使用它:packagemainimport("github.com/foo/bar/types")funcmain(){f:=&Foo{RequiredField1:"fff",}fmt.Printf("f.

security - 如何在 Golang 二进制文件中混淆变量、函数和包名称的字符串?

使用nmgo_binary命令时,发现变量名、函数名、包名甚至我的代码所在的目录都显示出来了,请问有什么办法可以混淆gobuild命令生成的二进制文件吗并防止gobinary被黑客利用? 最佳答案 Obfuscatingcan'tstopreverseengineeringbutinawaypreventinfoleakage这就是burrowers/garble(Go1.16+,2021年2月):Literalobfuscation使用-literals标志会导致文字表达式(例如字符串)被更复杂的变体替换,从而在运行时解析为相同的

go - 如何通过结构字段名称获取 Gmail API 错误代码?

GmailAPI错误响应结构包含一个代码字段,符合Examiner_,err:=gmailService.Users.Messages.Send("me",&gMsg).Do()t:=reflect.TypeOf(err)examiner(t,0)回应TypeisandkindisptrContainedtype:TypeisErrorandkindisstructField1nameisCodetypeisintandkindisint...我可以使用字段索引成功获取错误代码,但这更晦涩(因此更难维护)并且感觉更脆弱:errReflectElem:=reflect.ValueOf(e

go - 如何使用具有两个不同名称(短名称和长名称)的标志

我正在使用https://github.com/spf13/cobra使用标志。我希望我的CLI有两个名称的标志:-t或--token。我目前是这样使用它的:rootCmd.PersistentFlags().String("token","","Tokentoinsert")但是它给我打印了这样的标志:Flags:-h,--helphelpformyapp--tokenstringTokentoinsert我希望它是这样的:Flags:-h,--helphelpformyapp-t,--tokenstringTokentoinsert我该怎么做?我没有在谷歌上找到它,我试图为一个标志

go - 默认结构值

在Go中,我知道类型有默认值。在本例中采用初始化为0的int。我有一个问题,对我来说int中的0可以是一个有效值,所以我需要检查它是否由我设置或初始化。有什么办法可以完全分辨它们之间的区别吗?考虑到followingcode...我需要能够分辨testIntOne和testIntTwo之间的区别,但它们看起来是一样的!packagemainimport"log"typeteststruct{testIntOneinttestIntTwoint}funcmain(){s:=test{testIntOne:0}log.Println(s)} 最佳答案