当前位置: 首页 > news >正文

网站首页分类怎么做的网站建设需要包含什么

网站首页分类怎么做的,网站建设需要包含什么,建设网站需要什么硬件,移动网站建设cnfg文章目录 问题价值使用场景其他语言类似特性 问题 在 动手写分布式缓存 - GeeCache day2 单机并发缓存 这篇文章中#xff0c;有一个接口型函数的实现#xff1a; // A Getter loads data for a key. type Getter interface {Get(key string) ([]byte, error) }// A Getter… 文章目录 问题价值使用场景其他语言类似特性 问题 在 动手写分布式缓存 - GeeCache day2 单机并发缓存 这篇文章中有一个接口型函数的实现 // A Getter loads data for a key. type Getter interface {Get(key string) ([]byte, error) }// A GetterFunc implements Getter with a function. type GetterFunc func(key string) ([]byte, error)// Get implements Getter interface function func (f GetterFunc) Get(key string) ([]byte, error) {return f(key) }这里呢定义了一个接口 Getter只包含一个方法 Get(key string) ([]byte, error)紧接着定义了一个函数类型 GetterFuncGetterFunc 参数和返回值与 Getter 中 Get 方法是一致的。而且 GetterFunc 还定义了 Get 方式并在 Get 方法中调用自己这样就实现了接口 Getter。所以 GetterFunc 是一个实现了接口的函数类型简称为接口型函数。 接口型函数只能应用于接口内部只定义了一个方法的情况例如接口 Getter 内部有且只有一个方法 Get。既然只有一个方法为什么还要多此一举封装为一个接口呢定义参数的时候直接用 GetterFunc 这个函数类型不就好了让用户直接传入一个函数作为参数不更简单吗 所以呢接口型函数的价值什么 价值 我们想象这么一个使用场景GetFromSource 的作用是从某数据源获取结果接口类型 Getter 是其中一个参数代表某数据源 func GetFromSource(getter Getter, key string) []byte {buf, err : getter.Get(key)if err nil {return buf}return nil }我们可以有多种方式调用该函数 方式一GetterFunc 类型的函数作为参数 GetFromSource(GetterFunc(func(key string) ([]byte, error) {return []byte(key), nil }), hello)支持匿名函数也支持普通的函数 func test(key string) ([]byte, error) {return []byte(key), nil }func main() {GetFromSource(GetterFunc(test), hello) }将 test 强制类型转换为 GetterFuncGetterFunc 实现了接口 Getter是一个合法参数。这种方式适用于逻辑较为简单的场景。 方式二实现了 Getter 接口的结构体作为参数 type DB struct{ url string}func (db *DB) Query(sql string, args ...string) string {// ...return hello }func (db *DB) Get(key string) ([]byte, error) {// ...v : db.Query(SELECT NAME FROM TABLE WHEN NAME ?, key)return []byte(v), nil }func main() {GetFromSource(new(DB), hello) }DB 实现了接口 Getter也是一个合法参数。这种方式适用于逻辑较为复杂的场景如果对数据库的操作需要很多信息地址、用户名、密码还有很多中间状态需要保持比如超时、重连、加锁等等。这种情况下更适合封装为一个结构体作为参数。 这样既能够将普通的函数类型需类型转换作为参数也可以将结构体作为参数使用更为灵活可读性也更好这就是接口型函数的价值。 使用场景 这个特性在 groupcache 等大量的 Go 语言开源项目中被广泛使用标准库中用得也不少net/http 的 Handler 和 HandlerFunc 就是一个典型。 我们先看一下 Handler 的定义 type Handler interface {ServeHTTP(ResponseWriter, *Request) } type HandlerFunc func(ResponseWriter, *Request)func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {f(w, r) }摘自 Go 语言源代码 net/http/server.go 我们可以 http.Handle 来映射请求路径和处理函数Handle 的定义如下 func Handle(pattern string, handler Handler)第二个参数是即接口类型 Handler我们可以这么用。 func home(w http.ResponseWriter, r *http.Request) {w.WriteHeader(http.StatusOK)_, _ w.Write([]byte(hello, index page)) }func main() {http.Handle(/home, http.HandlerFunc(home))_ http.ListenAndServe(localhost:8000, nil) }通常我们还会使用另外一个函数 http.HandleFuncHandleFunc 的定义如下 func HandleFunc(pattern string, handler func(ResponseWriter, *Request))第二个参数是一个普通的函数类型那可以直接将 home 传递给 HandleFunc func main() {http.HandleFunc(/home, home)_ http.ListenAndServe(localhost:8000, nil) }那如果我们看过 HandleFunc 的内部实现的话就会知道两种写法是完全等价的内部将第二种写法转换为了第一种写法。 func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {if handler nil {panic(http: nil handler)}mux.Handle(pattern, HandlerFunc(handler)) }如果你仔细观察会发现 http.ListenAndServe 的第二个参数也是接口类型 Handler我们使用了标准库 net/http 内置的路由因此呢传入的值是 nil。那如果这个地方我们传入的是一个实现了 Handler 接口的结构体呢就可以完全托管所有的 HTTP 请求后续怎么路由怎么处理请求前后增加什么功能都可以自定义了。慢慢地就变成了一个功能丰富的 Web 框架了。如果你感兴趣呢可以阅读 7天用Go从零实现Web框架Gee教程。 其他语言类似特性 如果有 Java 编程经验的同学可能比较有感触。Java 1.5 中是不支持直接传入函数的参数要么是接口要么是对象。举一个最简单的例子列表自定义排序时需要实现一个匿名的 Comparator 类重写 compare 方法。 Collections.sort(list, new ComparatorInteger(){Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;} });Java 1.8 中引入了大量的函数式编程的特性其中 lambda 表达式和函数式接口就是一个很好的简化 Java 写法的特性。Java 1.8 中上述的例子可以简化为 Collections.sort(list, (Integer o1, Integer o2) - o2 - o1 );即从需要构造一个匿名对象简化为只需要一个lambda函数表达式可以认为是面向对象与函数式编程的一种结合。同样地这种写法只支持只定义了一个方法的接口类型因为只定义了一个方法的接口就会很明确传入进来的函数对应接口中的哪个方法。正是这种结合可以达到实现相同代码代码量更少的目的。
http://www.hkea.cn/news/14553435/

相关文章:

  • 做响应式网站有什么插件wordpress钻石插件
  • 网站色彩学网站模板 wordpress
  • 做网站困难吗百度网盘资源搜索引擎
  • 深圳企业公司网站设计上海网站建设服务是什么意思
  • 南京网站建设cnee民族文化网站建设的作用
  • 网站内容管理系统建设wordpress下载官网
  • 公司网站搜索引擎优化网页制作个人主页教程
  • 深圳住建设局网站公租房wordpress是干啥的
  • 网站设计用的技术网站备案 拉黑
  • 国产做爰网站昆明网站开发价格
  • 网站建设虚拟主机移动网站建设信息
  • 学技巧网站制作竞价在什么网站上做
  • 如何做一个个人网站免费货源在线永久
  • 无锡做网站首选众诺网站规划方案模板
  • 建设网站英语上海展览设计制作公司
  • 网站策划工具个人网站建设素材
  • 郑州网站建设(智巢)南沙网站制作
  • 西安那些做网站的公司公司变更注册地址的流程
  • 网站建设模板怎么用如何用服务器搭建网站
  • 哈尔滨网站制作建设廊坊seo管理
  • 在社保网站做调动肇庆seo排名外包
  • 吉林省住房和城乡建设厅网站沈阳网站优化哪家好
  • 做网站和APP需要多少钱盐城网站开发建设
  • 网站建设找哪一家比较好4.9.8wordpress
  • 如何设立外贸网站网站开发目录static
  • 政务网站建设和技术维护制度建筑招工找活平台
  • 在哪里查网站是什么时候建站德清网站制作
  • 网站开发的主要工作步骤超酷个人网站欣赏
  • 唯品会 一家专门做特卖的网站手机版深圳便宜做网站
  • 建设部颁发的证书网站合肥网站建设企业