go 函数 方法 接口
- 概论
- 函数
- 方法
- 接口
概论
- 方法在编译时静态绑定,依托于具体的类型
- 接口对应的方法是在运行时动态绑定
- 进程内初始化顺序 初始化导入包的常量和变量(可以导出的变量)--->包的init函数,不同文件内顺序是未定义的, 同一文件调用顺序是定义顺序--->main包内的常量变量和init---->main函数
函数调用顺序图

函数
可变数量的参数必须最后出现,本质是一个切片类型的参数
可变参数是一个空接口类型时,调用者是否解包可变参数会导致不同的结果
func main() {
var a = []interface{}{123, "abc"} Print(a...) // 123 abc 解包参数==》Print(123, "abc")
Print(a) // [123 abc] 不接包==》Print([]interface{}{123, "abc"})
} func Print(a ...interface{}) {
fmt.Println(a...)
}
空接口类型:没有任何方法
传参都是传值
- append为什么必须有返回值:因为切片结构包含底层数组的指针, 长度和容量, 函数可以通过指针修改切片内容但是长度和容量无法修改,所以必须有返回值,带回被改变的长度和容量
不用考虑堆栈位置,GC会自动设置变量存放位置
方法
- 绑定在具体的类型,编译时静态绑定
- 一个类型绑定的函数实现了接口的所有函数,这个类型就实现了这个接口
- c实现的面向对象只用将相应的类型作为函数第一个参数传入
- 没有传统面向对象的继承,通过组合来实现继承
接口
- 接口可以实现虚函数的多态性,运行时确定,延迟绑定
- 创建一个新的接口类型满足已经存在的具体类型而不用破坏这些类型的原有定义
- 基础类型不支持隐士转换
- 结构体内可以包含接口类型,纯虚函继承
空接口
没有任何方式
空接口内部实现保存了对象的类型和指针
空接口可以保存任何对象,类似于一个集装箱,存放物品
// 声明a变量, 类型int, 初始值为1
var a int = 1
// 声明i变量, 类型为interface{}, 初始值为a, 此时i的值变为1
var i interface{} = a
// 声明b变量, 尝试赋值i
var b int = i //出错,因为i是接口类型的,也不能显示转化
var i interface{} = 5667
j := i.(int)
fmt.Printf("%T->%d\n", j, j) //使用类型断言来转换,不安全的转化
空接口比较:类型和指针比较, 两个都一样才一样;
不能比较空接口中的动态值
| 类 型 | 说 明 |
|---|---|
| map | 宕机错误,不可比较 |
| 切片([]T) | 宕机错误,不可比较 |
| 通道(channel) | 可比较,必须由同一个 make 生成,也就是同一个通道才会是 true,否则为 false |
| 数组([容量]T) | 可比较,编译期知道两个数组是否一致 |
| 结构体 | 可比较,可以逐个比较结构体的值 |
| 函数 | 可比较 |
类型断言
- x.(T) x是interface()类型, T是要断言的类型
- 使用场景:当某个interface{}的变量真是类型为A时才做某件事
- 相当于赋值给void*的真实类型
go 函数 方法 接口的更多相关文章
- Golang 函数 方法 接口的简单介绍
函数 函数是基本的代码块,通常我们会将一个功能封装成一个函数,方便我们调用,同时避免代码臃肿复杂. 函数的基本格式 func TestFunc(a int, b string) (int, strin ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- 如何设计PHP业务模块(函数/方法)返回结果的结构?
如题:如何设计业务模块返回结果的结构? 一个业务函数/方法执行后,对外输出数据的结构通常有以下几种: 1.返回数字,如 成功时返回 0,失败时返回 -1,有的还会用一个全局变量输出错误信息: < ...
- paip.函数方法回调机制跟java php python c++的实现
paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- typescript函数类型接口
/* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据, ...
- 29 匿名内部类、函数型接口、lamda表达式的引入
匿名内部类 参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html 进入后搜索匿名内部类. 函数型接口 函数式接口(Function ...
- JVM 专题十四:本地方法接口
1. 本地方法接口 2. 什么是本地方法? 简单来讲,一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这样一个java方法:该方法的实现由非Ja ...
- JVM--先说本地方法接口
本地方法接口 在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface) 简单来讲,一个Native ...
- 你真的会玩SQL吗?实用函数方法汇总
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
随机推荐
- 1. jquery插件手机
1. http://jqtjs.com/preview/demos/main/index.html#home2. jquery weUI ===== 插件:https://blog.csdn.net/ ...
- react-i8n
1. 在项目中安装 npm install react-intl --save 2.兼容Safari各个版本需要安装intl npm install intl --save 3.编写语言包 1.)新建 ...
- 如何在非 sudo 用户下运行 docker 命令?
当我们在一台 Linux 系统中安装了 Docker 后, 有时候会遇到下面这样的错误, 我们在运行 docker 的命令时必须加上 sudo, 例如: sudo docker ps, 但是我们其实更 ...
- kubernetes的无状态服务和有状态服务介绍
无状态服务 1)是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的 2)多个实例可以共享相同的持久化数据.例如: nginx实例和tomcat实例 3 ...
- BUAA_OO 第一单元总结
1.简单多项式求导 第一次作业的难点,我认为是对输入的预处理,尤其是正则表达式的使用.这次作业的思路是:首先将表达式进行预处理,(由于题目中要求不会有空格产生的WF,所以可以放心大胆的消除空格). 消 ...
- jax-rs下载文件
@Path("/file") public class FileService { private static final String FILE_PATH = "c: ...
- 【shell】Shell变量基础及深入
1. 什么是变量 变量就是用一个固定的字符串(也可能是字符数字等的组合),替代更多更复杂的内容,这个内容里可能还会包含变量和路径,字符串等其他内容. 变量的定义是存在内存中. x=1 y=2 2. 变 ...
- CSS开发技巧(三):图片点击缩放
前言 利用CSS实现图片的点击缩放是一个很值得研究的效果.在某些业务需求场景中,我们可能并没有足够的空间展示过大的图片,这就需要限制图片容器的宽度和高度.然而图片限制了宽度,一些图片的细节便又无法看 ...
- $_server[]关于浏览器和服务器的参数获取
$_SERVER['USER'] www $_SERVER['HOME'] /home/www $_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'] 1 $_SERVE ...
- Intellij IDEA 使用Spring-boot-devTools
转载地址:https://blog.csdn.net/u013938484/article/details/77541050 转载于:https://blog.51cto.com/881206524/ ...