集合
集合是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把参数传进去。