上一篇介绍了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会被垃圾回收。