Go基础知识梳理(三)

结构

type Person struct {
name string
sex int
} func main() {
//推荐写法
person := Person{
name: "张三",
sex: 1,
}
//不推荐写法
person = Person{"李四", 1} p := New(Person)
//会初始化name="", sex = 0
}

接口

//接口的一些特点:
//接口的命名一般以er结尾,具体看业务场景
//接口内部的方法不需要func引导
//在接口的定义中没有实现只有声明 type Person inteface{
Say()
Run()
} //具有Person中的方法,则视为该接口的实现类
type Man struct{}
func (m Man) Say(){}
func (m Man) Run(){} type Woman struct{}
func (m Woman) Say(){}
func (m Woman) Run(){}

方法

//首先看一段代码
type Person struct {
Age int
}
func (p Person) Age() {
fmt.Println(p.Age)
}
func (p *Person) Age2() {
fmt.Println(p.Age)
}
//发现两个Age方法,一个接受的是值类型,一个接受的指针,那么区别在哪里呢?
//这两个方法实际等于
func Age(p Person) {
fmt.Println(p.Age)
}
func Age2(p *Person) {
fmt.Println(p.Age)
}
//也就是说相当于参数来进行传值
//传值类型也就是值的拷贝(数据的副本),在函数内改变其数值不会影响到原来的值
//传入的数值类型为指针,就是相当于传入该数据的内存地址,在函数内改变其数值会影响全局
//高级用法
//src/net/http/server.go
type HandlerFunc func(ResponseWriter, *Request) //这是一种包装器的编程技法,为函数添加方法
func (f HandlerFunc) ServeHttp(w ResponseWriter, r *Request) {
f(w, r)
} //同时HandlerFunc实现了Handler接口
type Handler interface{
ServeHttp(ResponseWriter, *Request)
} func (mux *ServeMux) Handle(pattern string, handler Handler) //handler方法转为HandlerFunc函数,同时因为HandlerFunc实现了Handler接口,所以可以运用mux的Handle方法
func (mux *ServeMux) HandlerFunc(pattern string, handler func(ResponseWriter, *Request)) {
mux.Handle(pattern, HandlerFunc(handler))
} 通过 http 标准库里面对于函数类型的使用,我们可以看到函数类型的如下意义
( 1 )函数也是一种类型,可以在函数字面量类型的基础上定义一种命名函数类型。
(2 )有名函数和匿名函数的函数签名与命名函数类型的底层类型相同,它们之间可以进行类型转换。
(3 )可以为有名函数类型添加方法,这种为一个函数类型添加方法的技法非常有价值,可以方便地为一个函数增加“拦截”或“过滤”等额外功能,这提供了一种装饰设计模式
(4 )为有名函数类型添加方法,使其与接口打通关系,使用接口的地方可以传递函数类型的变量,这为函数到接口的转换开启了大门

类型断言

//推荐写法
var i interface{}
i = 1
var a int
if _, ok := i.(int); !ok {
//err处理
return
}
a = i.(int)
fmt.Println(a) //或者
var i interface{}
i = 1
if a, ok := i.(int); ok {
fmt.Println(a)
return
}

Go基础知识梳理(三)的更多相关文章

  1. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  2. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  3. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  7. C#基础知识梳理索引

    C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...

  8. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

  9. [SQL] SQL 基础知识梳理(七)- 集合运算

    SQL 基础知识梳理(七)- 集合运算 目录 表的加减法 联结(以列为单位) 一.表的加减法 1.集合:记录的集合(表.视图和查询的执行结果). 2.UNION(并集):表的加法 -- DDL:创建表 ...

随机推荐

  1. 深度评测丨 GaussDB(for Redis) 大 Key 操作的影响

    本文分享自华为云社区<墨天轮评测:GaussDB(for Redis)大Key操作的影响>,作者: 高斯 Redis 官方博客. 在前一篇文章<墨天轮评测:GaussDB(for R ...

  2. 【转】C# / Extension 扩展方法

    扩展方法简介扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调 ...

  3. IDEA中的.iml文件和.idea文件夹作用和意义

    感谢原文作者:LZHHuo 原文链接:https://blog.csdn.net/weixin_41699562/article/details/99552780 .iml文件 idea 对modul ...

  4. git merge -ff --no-ff --squash 的区别

    感谢原文作者:futureme 原文链接:https://www.cnblogs.com/taylorluo/articles/10810762.html git merge #没有参数(默认为–ff ...

  5. Swift逻辑分支

    一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有 ...

  6. Emoji与unicode特殊字符的处理

    遇到了一个很让人纠结的问题:emoji表情在使用的过程中,会莫名其妙的消失,或者变成乱码,同时数据库用utf8mb4来存储,但是也出现了问题,冷备过后,导入进库的时候,变成了不可见字符,神奇的消失了! ...

  7. Jmeter测试dubbo接口填坑

    通过jmeter测试dubbo的方法网上有很多帖子,需要的自己度娘去就可以. 使用的时候有个问题需要提示一下,因为我碰到了,还耽误了一些时间,不说中间的过程.直接说处理方式: 问题是这样的: 将dub ...

  8. iOS应用性能调优的建议和技巧--中高级--王朋

    中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, Cache, 还是Cache! 11. 权衡渲染方法 12. 处理内存警告 13. 重用大开销 ...

  9. Byobu安装与使用

    机子为Ubuntu18 Byobu安装 sudo apt-get install byobu Byobu安装后默认禁用,需要启用Byobu,之后每次登陆自动启用Byobu byobu-enable 还 ...

  10. Solution -「AGC 019E」「AT 2704」Shuffle and Swap

    \(\mathcal{Description}\)   Link.   给定 \(01\) 序列 \(\{A_n\}\) 和 \(\{B_n\}\),其中 \(1\) 的个数均为 \(k\).记 \( ...