Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.5k views
in Technique[技术] by (71.8m points)

golang的interface的一个疑问

package main

func main() { 
   var t1,t2 interface{} 
   println(t1==nil,t1==t2) 
  
   t1,t2=100,100
   println(t1==t2) 
  
   t1,t2=map[string]int{},map[string]int{} 
   println(t1==t2) 
}

golang小白请教两个问题

  1. map[string]int{}中的int{}是什么意思?它与map[string]int有什么区别吗?
  2. 为什么t1,t2=map[string]int{},map[string]int{} 这行代码会报错,panic: runtime error: comparing uncomparable type map[string]int?

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

map[string]int{} 括号代表初始化(通过括号或者make),map如果只定义变量不初始化,默认值为nil。没有括号那就只是定义了这么一个 map[string]int 类型而已,使用必须要初始化,不然直接报错。

你报错的代码是println(t1==t2)这一行,因为go是静态语言,map是一个复杂类型,你自己创建的类型,底层根本就没有实现 = 这个操作。所以不能对比。uncomparable type 不可比较的类型


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...