上一篇介绍了Go中的基本数据结构,本篇主要详细说明下结构体和Map的概念和使用。
1,结构体类型
首先结构体是一个数据集合,其中各自的数据元素可以是相同或不同的数据类型,类似像是PHP中的对象概念。可以定义多个key,val值根据需要定义不同的类型来使用。
结构体的标准定义格式是:
type structname struct{ member member_type member member_type .....}//其中structname是结构体的变量名,//member是成员名称,//memeber_type是成员类型比如:type Cars struct{ name string color string price int}
定义完结构体,就可以声明结构体的变量,常用的声明方式有3种:
(1)structVar := structTypeName{var1,var2,...varn}
(2)structVar := structTypeName{key1:var1,key2:var2....}
(3)var structVar structTypeName
structVar.key1 = var1
structVar.key2 = var2
接下来看个实例
package mainimport "fmt"type Cars struct{ name string color string price int}func main(){ baoma := Cars{name:"baoma_z4",color:"red",price:560000} var aodi Cars aodi.name = "aodi_q7" aodi.color = "block" aodi.price = 780000 printCarsStruct("baoma", baoma) printCarsStruct("aodi", aodi)}//打印Car结构体信息func printCarsStruct(carname string,car Cars){ fmt.Println(carname,"中的name是", car.name) fmt.Println(carname,"中的color是", car.color) fmt.Println(carname,"中的price是", car.price)}
上述实例的输出为:
baoma 中的name是 baoma_z4baoma 中的color是 redbaoma 中的price是 560000aodi 中的name是 aodi_q7aodi 中的color是 blockaodi 中的price是 780000
2,Map类型
Map类型是一种无序的键值对集合,key相等于索引,快速检索到数据。内部类型是用的hash来实现的。类似于PHP的数组类型,区别在于PHP的复杂类似都是用的数组来实现,不需要特别声明。Go需要提前声明元素类型,以及遍历和删除方式略有不同
Map的定义方式:
var mapValName map[keyDataType]valDataType //声明map变量mapValName := make(map[keyDataType]valDataType) //make初始化
下面通过实例了解下:
package mainimport "fmt"func main(){ //声明Map var carPriceList map[string]string carPriceList = make(map[string]string) carPriceList["baoma"] = "7800" carPriceList["aodi"] = "8900" //遍历 for name := range carPriceList{ fmt.Println(name,"的价格是", carPriceList[name]) } //删除元素 delete(carPriceList, "aodi") //获取元素是否存在,存在返回元素值,不存在返回空, ok返回 true/false aodiPrice,ok := carPriceList["aodi"] fmt.Printmln("ok is ", ok) if ok { fmt.Println("aodi元素存在,价格为", carPriceList["aodi"]) }else { fmt.Println("aodi元素不存在了") } }
上述实例执行结果为:
baoma 的价格是 7800aodi 的价格是 8900ok is falseaodi元素不存在了
总结下PHP数组和Go Map的操作区别:
1,声明和初始化方式不同
PHP直接使用,Go必须先声明类型且初始化后才可以存放键值对
2,删除方式不同
PHP使用unset()删除数组元素,Go中使用delete()删除
3,遍历方式不同
PHP使用foreach()可以直接遍历,Go需要用for借助range来遍历
4,清空元素
PHP直接赋值个空数组即可,Go中需要重新make一下map类型,原先的map会被垃圾回收。