草庐IT

range-init

全部标签

go - 如何在防范 "slice bounds out of range"错误的同时轻松获取 Go 中的子字符串?

使用Go,我想将长字符串截断为任意长度(例如用于日志记录)。constmaxLen=100funcmain(){myString:="Thisstringmightbelonger,sowe'llkeepallexceptthefirst100bytes."fmt.Println(myString[:10])//Printsthefirst10bytesfmt.Println(myString[:maxLen])//panic:runtimeerror:sliceboundsoutofrange}现在,我可以用一个额外的变量和if语句来解决它,但这看起来很冗长:constmaxLen=

go - Go 中的 range 关键字和 2d slice

我第一次尝试使用Go。在过去的一个多小时里,我一直不知道为什么这段代码不起作用。grid:=make([][]string,2)for_,row:=rangegrid{row=[]string{"foo","bar"}}fmt.Println(grid)我希望它打印出类似的东西[["foo","bar"]["foo","bar"]]但是它拒绝编译并显示消息rowdeclaredandnotused。很明显,我遗漏了一些关于2dslice和range关键字的内容。有什么想法吗? 最佳答案 row不是对grid中值的引用,它是slice

go - golang 中的 init 函数可以返回值吗?

任何人都可以建议任何其他方法来处理在我的server.go程序中初始化函数之外的数据库吗?我在我的程序中使用MySQL,我需要初始化和连接并将处理程序发送到Controller。 最佳答案 你不能用init()函数返回一个值,但你可以用它初始化全局(包)变量,这样你就可以尝试类似的事情:packagemysqlvarConnConnectionfuncinit(){Conn=...}现在Controller可以访问您的连接,导入您的包并访问您已经初始化的连接。packagecontrollersimport("mysql")func

戈朗 : Why the following code does NOT panic with "slice index out of range" error

这个问题在这里已经有了答案:Appendingoneelementtonilsliceincreasescapacitybytwo(4个答案)关闭5年前。packagemainimport"fmt"typePointstruct{XintYint}typePointsstruct{P[]Point}funcmain(){data:=Points{}fori:=0;i当上面的程序运行时,它打印出:[{X:5Y:10}{X:6Y:12}{X:7Y:14}{X:8Y:16}{X:9Y:18}{X:0Y:0}]为什么有{X:0,Y:0}似乎是自动生成的,因为slice的长度是10,但我试图得到

Golang range through channel 在实现堆排列算法时具有奇怪的行为

我正在尝试实现Heap'sAlgorithm在去使用channel。当仅在屏幕上打印slice时,下面的代码工作正常,但是当使用channel将数组传递到主函数上的for/range循环时,会发生一些意外行为,并且slice/数组以口是心非的方式打印,并且并非所有排列都是发送。我想也许我在主要功能能够打印结果之前关闭channel,但我不希望双重打印。为什么会发生这种情况,我该如何让它发挥作用。packagemainimport"fmt"funcperm(a[]int64){varn=len(a)varc=make([]int,n)fmt.Println(a)i:=0fori

google-app-engine - 从 AppEngine 上的 Go 中的 init() 函数获取 URL

背景:我在GAE上运行Go并为我的路由器使用Mux。为了获取URL,GAE要求我使用其内置的urlFetch功能。我想让这个URL提取在我的模块init()期间发生,但据我所知,我只能在通过处理程序调用时使用urlFetch。funcinit(){r:=mux.NewRouter()r.HandleFunc("/",homeHandler)r.HandleFunc("/about",anotherHandler)http.Handle("/",r)}GAE建议使用以下代码来制作urlFetch:c:=appengine.NewContext(r)client:=urlfetch.Cli

go - init() 未在新包中运行

我已经有一段时间没有使用Go了,我刚刚开始重新处理一个旧项目。我在许多包中都有init()函数,它们工作正常。然而,我刚刚创建了一个新包并添加了一个init()函数,但它不会像其他包一样在初始化期间运行。如果我将init()函数放在以前存在的包中,它运行良好...我相信这是一个简单的问题,但我终究无法解决。我可能做错了什么? 最佳答案 如果您的主程序根本不导入您的新包...它的init()函数将不会被调用。如果只想执行导入包的init()函数,不想使用包的其他内容,应该修改import"foo"导入_"foo"。参见initfunc

go - 在包的 init 函数中初始化变量是否确保 golang 应用程序中的单个实例?

我正在编写布隆过滤器包。在我的包中,我想创建一个X的实例(非导出的),我希望它只作为一个实例存在;无论我的包被导入应用程序多少次。我正在做的一个简单片段是:packagesuperduperbloomfiltervarxXfuncinit(){x=X.New(....)}这是正确的吗? 最佳答案 whichIwanttoexistonlyasasingleinstance;nomatterhowmanytimesmypackageisimportedintoanappThespec说导入的包只初始化一次:Ifapackagehasi

go - 为什么在 init() 中检查 nil

我正在阅读thisarticle在其示例中提供此代码:vartemplatesmap[string]*template.Template//Loadtemplatesonprograminitialisationfuncinit(){iftemplates==nil{templates=make(map[string]*template.Template)}为什么要在init()中检查iftemplates==nil?在执行的这个点上它不会总是一样吗? 最佳答案 没有理由在文章提供的代码中检查nil。还有其他方法来构造代码。选项1:

performance - 在 init 或处理函数中读取模板?

我正在为网站编写一个基本服务器。现在我面临一个(对我来说)困难的性能问题。是不是在init()函数中读取模板文件比较好?//Initializeallpagesofwebsitefuncinit(){indexPageData,err:=ioutil.ReadFile("./tpl/index.tpl")check(err)}还是在http.HandlerFunc中?funcindex(whttp.ResponseWriter,req*http.Request){indexPageData,err:=ioutil.ReadFile("./tpl/index.tpl")check(err