golang基础学习

集合

集合是php中没有的,集合map,使用的是 hash表,是无序的!这点很重要!无序,意思是循环出来,第一个指不定是哪个

定义:

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
map_variable [ "Italy" ] = "罗马"
/*或者无声明*/
maps := map[string]string{"a", "b"}

这里有个注意的,delete()可以删除集合里面的值, 在上面key为Italy的时候 delete(map_variable, "Italy"),但是在下面那种情况是用的delete(maps, "a")

在看beego源码的时候,有个集合是 map[string]func(){},在教程或者一些手册上是没有说明,对比着源码大致明白了,就是一次函数调用,然后把参数给传下去,下面是我写的个列子,帮助理解

package main

import (
    "fmt"
)

type my interface {
    call(string)
}

type myCall struct {
}

func (mycalls myCall) call(str string)  {
    fmt.Println("this is my call:" + str)
}

func handelmy(my my) {
    my.call("my handels")
}
func handelmy2(my my) {
    my.call("my2 handels")
}
func main() {
    //集合MAP
    mycall := new(myCall)

    maps := map[string]func(my) {
        "404": handelmy,
        "405": handelmy2,
    }

    for e, h := range maps {
        fmt.Println(e)
        h(mycall)
    }

}

这个是模仿beego的registerDefaultErrorHandler 写的, 就是注册一堆函数,然后循环map的时候可以调用,调用的时候直接把func的参数给传到了handelmy,handelmy2这些函数里面,有点像php里面的回调函数再次调用call_use_func把参数传进去。

标签: 无

发表评论: