• 概论
  • 函数
  • 方法
  • 接口

概论

  • 方法在编译时静态绑定,依托于具体的类型
  • 接口对应的方法是在运行时动态绑定
  • 进程内初始化顺序 初始化导入包的常量和变量(可以导出的变量)--->包的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 函数 方法 接口的更多相关文章

  1. Golang 函数 方法 接口的简单介绍

    函数 函数是基本的代码块,通常我们会将一个功能封装成一个函数,方便我们调用,同时避免代码臃肿复杂. 函数的基本格式 func TestFunc(a int, b string) (int, strin ...

  2. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  3. 如何设计PHP业务模块(函数/方法)返回结果的结构?

    如题:如何设计业务模块返回结果的结构? 一个业务函数/方法执行后,对外输出数据的结构通常有以下几种: 1.返回数字,如 成功时返回 0,失败时返回 -1,有的还会用一个全局变量输出错误信息: < ...

  4. paip.函数方法回调机制跟java php python c++的实现

    paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  5. typescript函数类型接口

    /* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据, ...

  6. 29 匿名内部类、函数型接口、lamda表达式的引入

    匿名内部类 参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html 进入后搜索匿名内部类. 函数型接口 函数式接口(Function ...

  7. JVM 专题十四:本地方法接口

    1. 本地方法接口 2. 什么是本地方法? 简单来讲,一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这样一个java方法:该方法的实现由非Ja ...

  8. JVM--先说本地方法接口

    本地方法接口 在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface) 简单来讲,一个Native ...

  9. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

随机推荐

  1. atom跨平台超好用的markdown实时预览

    https://atom.io/ sublime有预览markdown的插件,但仅限于每次在浏览器中预览,想要找一个能够实时在软件中预览的,终于发现了atom. 很多功能以插件的形式安装,theme也 ...

  2. 深入浅出webpack笔记

    1.CommonJS CommonJS是一种被广泛使用的JavaScript模块化规范,其核心思想是用过require方法来同步加载依赖的其他模块,通过moudle.exports导出需要暴露的接口, ...

  3. python进入adb shell交互模式

    import subprocess #方法一:进入某个环境执行语句(adb shell),注意shell内部命令需要带\n,执行完后一定记得执行exit命令退出,否则会阻塞 obj = subproc ...

  4. SpringCloud-Bus 消息总线

    概述 基本介绍 Spring Cloud Bus 目前支持两种消息代理:RabbitMQ.Kafka Spring Cloud Config 配合 Spring Cloud Bus 使用可以实现配置的 ...

  5. java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列

    什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...

  6. SweetAlert - 演示6种不同的提示框效果

    http://www.sucaihuo.com/js/190.html http://www.cnblogs.com/beiz/p/5238124.html

  7. 闲聊http1.1的6个方法

    GET :获取资源GET 方法用来请求访问已被 URI 识别的资源.指定的资源经服务器端解析后返回响应内容. POST :传输实体主体POST 方法用来传输实体的主体.虽然用 GET 方法也可以传输实 ...

  8. awk,seq,xarg实例使用

    基于https://www.cnblogs.com/wangyuebo/p/5836933.html的详细补充讲解 [root@localhost awk]# seq 10|xargs -n 2 &g ...

  9. IDEA 之 Java项目复制

    1.复制一个项目,并改名字  2.更改以下文件名字  3.将以下文件中的原有名字,替换成更改后的名字(例如MyWebapp07替换成MyWebapp08) 4.将out文件夹给删除 5.然后用IDEA ...

  10. R 语言命令行参数处理

    在unix.windows外部需要调用R脚本执行,然后又需要输入不同的参数,类似shell脚本的命令行参数输入,可以使用Rcript命令实现. 命令格式:Rscript [options] [-e e ...