读不懂语句,实质上不够熟悉各种类型定义的语法。

1、

var mapname map[string]int //正常定义map,string是key类型,int是value类型。int前没空格。
mp1 := make(map[int][]int)  //value类型是 []int切片类型。切片不指定长度,数组指定长度。
mp2 := make(map[int]*[]int) //value类型是 *[]int

用切片作为 map 的值

  • 一个 key 要对应多个值怎么办?将 value 定义为 []int 类型或者其他类型的切片,就可以优雅的解决这个问题。
  • 例子:
Header = map[string][]string{
  Accept-Encoding": {"gzip, deflate"},
  "Accept-Language": {"en-us"},
  "Foo": {"Bar", "two"},
}

2、

ris := [](map[string]interface{}){}  // golang 声明一个map数组

3、

gin.go中
不理解这个HandlerFunc到底是个啥?应该是表示一个参数为*Contex的函数?

// HandlerFunc defines the handler used by gin middleware as return value.
type HandlerFunc func(*Context)

搜索一个类似的,http.HandlerFunc:【没大懂,适配器是啥?】

HandlerFunc实现了ServeHTTP方法,它的ServeHTTP方法实际上是调用函数本身。
所以HandlerFunc就是一个普通函数func(http.ResponseWriter, *http.Request)满足Handler接口的适配器。
为什么ServeHTTP的实现没有返回值?
HandlerFunc到底是个啥,有返回类型吗,是没定义还是随意?从调用可知,HandlerFunc返回Handler类型,所以这个该怎么看?【直接看链接吧,解释没看懂?】

package http
type HandlerFunc func(w ResponseWriter, r *Request)
func(f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { //func是关键字,(f HandlerFunc)是接收器,ServeHTTP是类型HandlerFunc的方法名,(w ResponseWriter, r *Request)参数
    f(w,r)
}
截图
<img src="https://img2022.cnblogs.com/blog/968024/202210/968024-20221023022907390-843405363.png" width="50%">
<img src="https://img2022.cnblogs.com/blog/968024/202210/968024-20221023021630634-377111499.png" width="50%">

参考:https://zhuanlan.zhihu.com/p/354482838

4、

var strategy func(Addr) bool // 变量名是strategy,变量类型是一个函数,函数类型是  func(Addr) bool  ,
                             // 实际上相当于仅仅摆出了函数涉及的类型,即 func关键字(参数类型) 返回类型
完整方法定义
func (addrs addrList) partition(strategy func(Addr) bool) (primaries, fallbacks addrList) {
	var primaryLabel bool
	for i, addr := range addrs {
		label := strategy(addr)
		if i == 0 || label == primaryLabel {
			primaryLabel = label
			primaries = append(primaries, addr)
		} else {
			fallbacks = append(fallbacks, addr)
		}
	}
	return
}

(1)面向接口编程
以上方法定义中,把函数作为参数,体现了go语言中,函数是一等(first-class)公民,当函数作为参数传递时,就更加灵活。
只需要搭一个接口框架,定义好函数的类型样式,把函数作为参数传递出去,函数的具体实现由具体场景接口实现来决定。
实际上是面向接口的编程,终极目的是为了复用代码时保证一定的灵活性。

(2)方法相当于消息,方法调用就是给对象发送一条消息。

posted on 2022-09-20 18:34  西伯尔  阅读(26)  评论(0编辑  收藏  举报