草庐IT

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

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

pointers - Golang 处理 nil 指针异常

考虑以下代码:list:=strings.Split(somestring,"\n")假设这会返回一个包含三个元素的列表或slice。然后,如果您尝试访问slice范围之外的内容:someFunction(list[3])程序可能会因为nil指针而崩溃。Golang有没有什么方法可以处理nil指针异常,这样程序就不会崩溃,而是可以做出适当的响应? 最佳答案 你不能在Go中这样做,即使你可以也不应该这样做。始终检查您的变量和slice,每次您尝试在slice或数组上使用未经检查的索引时,上帝都会杀死一只小猫,我喜欢小猫,所以我个人认为

go - 它是一个空值结构 nil

请看下面的代码片段。packagemainimport"fmt"typeEmptystruct{Field1,Field2string}funcmain(){value:=Empty{}fmt.Println(value==nil)fmt.Printf("%p",&value)}编译错误./empty_struct.go:19:cannotconvertniltotypeEmpty如何检查值结构类型是否为空? 最佳答案 指针、slice、channel、接口(interface)和映射是唯一可以与nil进行比较的类型。结构值不能与n

go - 为什么数字 0 的 "nil"值为 0?

字符串""的"nil"值对我来说有意义,但0是合法数字。例如,房间中的人数可以是0,但人名不能是""。这个约定背后的原因是什么?(编辑)附加信息:我想做的是有一种方法来测试是否为数字设置了值。将某人的名字设置为""显然是不正确的,而将整数设置为零可能是合法的。在go中是否有解决此类事件的典型方法? 最佳答案 The"nil"valueforastring""makessensetomebut0isalegitimatenumber.你的陈述有两个明显的问题:不存在字符串的"nil"值。""是完全合法的字符串。您似乎混淆了Go的“零值

hash - 调用 Write(val) 然后调用 Sum(nil) 与哈希中的 Sum(val) 之间的区别?

我正在研究使用Go的crypto包,并且我有一个我正在尝试弄清楚的简单示例。我知道我可以将io.WriteString与散列一起使用,但我想在将它与另一个库连接之前直接了解散列对象。packagemainimport("crypto/md5""fmt")funcmain(){val:=[]byte("HelloWorld")h:=md5.New()h.Write(val)fmt.Printf("%x\n",h.Sum(nil))fmt.Println()h2:=md5.New()fmt.Printf("%x\n",h2.Sum(val))}Runningit产生这个输出:b10a8db

sql - 如何避免可空 JSON 列上的​​扫描对 : <nil> *json. RawMessage 错误?

几周前,我开始学习go并尝试在学习基础知识的同时构建一个简单的博客应用程序。目前我正在尝试使用database/sql和github.com/lib/pq包来获取和保存博客文章。我不喜欢在不完全了解native行为和go基础知识的情况下使用3rd方包,如sqlx或gorm。我的Post结构是这样的:typePoststruct{IdintTitlestringBodystringTagsjson.RawMessage}当保留帖子时,我的save()函数可以正常工作:func(p*Post)save()(int,error){constquery=`INSERTINTOpost(titl

pointers - 将 nil 分配给指针

我正在尝试对列表实现delete()方法(无HEAD引用)我发现我可以将参数修改为结构体。func(l*LinkedList)Delete(n*Node){ifn.next==nil{n=nil}else{current:=&n*n=*n.next*current=nil}}“else”部分工作正常,但删除最后一个节点不会修改列表尝试使用*n=nil但是我遇到了编译错误。cannotusenilastypeNodeinassignment在这个playground中完成代码:http://play.golang.org/p/Dhzyd7QHEw 最佳答案

go 函数 - panic : runtime error: invalid memory address or nil pointer dereference

在此先感谢大家的帮助。我已经在问题发生的第41、42和58行做了标记。我无法追踪引发错误的原因。似乎所有变量都已正确分配。我使用命令:gorunfile.go'command''ipaddress'ex.-gorunfile.gouptime8.8.8.8错误是:panic:runtimeerror:invalidmemoryaddressornilpointerdereference[signalSIGSEGV:segmentationviolationcode=0x1addr=0x0pc=0x54fb36]goroutine20[running]:golang.org/x/cryp

reflection - 我如何将 reflect.Value.Call() 与 nil 输入一起使用?

我想在Go中调用一个函数,对方法值使用reflect.Value.Call,并将nil作为参数传递。有关说明,请参见下面的代码。我曾尝试在输入数组中使用reflect.ValueOf(nil)和reflect.Value{},但第一次出现panic是因为nil没有值;当我将它传递给Call时,第二个panic,因为它是一个零reflect.Value。请注意,如代码所示,当然可以将nil传递给函数而无需反射,包括当该参数是接收者时。问题是:是否可以使用reflect.Value.Call调用函数,并将其中一个参数作为nil传递?您可以构建并运行以下代码:http://play.gola

go - 如何使用反射访问 map 的 nil 键?

我有一个具有nil-keyed值的map:mapp:=map[interface{}]interface{}{nil:"a",}直接访问它的nil键是有效的:fmt.Println("key[nil]:",mapp[nil])但是使用反射却不行-如何做到这一点?rmapp:=reflect.ValueOf(mapp)rkey:=reflect.ValueOf(interface{}(nil))rval:=rmapp.MapIndex(rmapp.MapIndex(rkey))fmt.Println("key[nil]:",rval)这里的非工作代码:https://play.golan