静态类型、动态类型、潜在类型

静态类型:指在变量声明中示出的那个类型。绝大多数类型都只有静态类型。唯独接口类型的变量例外,他除了拥有静态类型之外,还拥有动态类型。

动态类型:指在运行时与该变量绑定在一起的是实际类型。这个实际类型可以是实现了这个接口类型的任何类型(任何类型指的是蓝色字)。接口类型变量的动态类型可以在执行期间变化,因为所有实现了这个接口类型的类型的值都可以被赋值给这个变量。但是,这个变量的静态类型永远会是这个接口类型。

只要一个数据类型(或者与其对应的指针类型)附带的方法集合是某一个接口的方法集合的超集。就可以判定该类型实现了这个接口。一个非接口类型的数据类型,他所拥有方法的集合决定了他是否实现了某个或者某些接口。

潜在类型:每个类型都会有潜在类型。

       预定义类型(基本类型)的潜在类型是他自身;

       一个由类型字面量构造的复合类型,其潜在类型是它自身。

type Book struct{
Name string
ISBN string
Press string
PageNumber uint16
}

     除上面2种情况之外,这个类型的潜在类型就是在类型声明中的那个类型的潜在类型

type myString1 string

myString1的潜在类型就是string的潜在类型,而string是预定义类型(预定义类型的潜在类型是其自身),所以myString1的潜在类型是string

type myString2 []string

myString2的潜在类型就是[3]string的潜在类型,而[3]string既不是预定义类型,也不是有类型字面量构成的复合类型。而是一个类型为string的数组类型,他的潜在类型是string类型,所以myString2的潜在类型是数组类型

类型断言 x.(T)

x的动态类型是否是T类型或者T类型的实现类型。只有在运行期间,x的动态类型在能够被获知,而在编译期间能够确定的只有T所带代表的类型。这也就是为什么只有在运行期间才能够确定类型断言是否成功的原因。当类型断言失败时,将引发panic

v,ok := x.(T)

1.如果断言成功,v将会是已经被转换成T类型的表达式x的求值结果,否则v就是T类型的零值

2.ok的值体现了断言是否成功(true成功,false失败)

3.即使断言失败也不会引发panic

值方法 & 指针方法

在值方法中,对接收者的值的改变在该方法外是不可见的。

见代码分析:http://www.cnblogs.com/kelamoyujuzhen/p/7074779.html

值类型、指针类型、基本类型

以上说法仅限于Go语言中方法的接收器。

方法接收器声明的几条规则:

1.接收器的类型必须是某个自定义的数据类型(值类型),或者自定义数据据类型对应的指针类型(指针类型)。但是不论是哪一种类型,接收器的基本类型都是那个自定义数据类型

func (self *SortableStrings) Sort()

接收器的类型是*SortableStrings,是一个指针类型。其基本类型是SortableStrings

接收器的基本类型既不能是一个指针类型。也不能是一个接口类型

2.接收器基本类型的声明必须与方法的声明在同一个代码包(package)内

3.接收器的标识符不能是空标识符“_”

定义变量

使用var关键字是Go最基本的定义变量方式,有时也会使用到:=来定义变量。

 //“:=”只能在声明“局部变量”的时候使用,而“var”没有这个限制
var number int //定义变量
var number int = //定义变量并初始化值
var number1, number2, number3 int = , , //平行赋值
5 number1, number2, number3 := , , //平行赋值

某一类型的nil值与empoty值

nil有点复杂,个人观点:slice、map在只定义未赋值时为nil (太过于片面,欢迎大神补充)

 // 不管我们用 nil slice 还是 empty slice,内建函数 append,len和cap的工作方式完全相同。
var slice []int //nil slice
silce := make([]int, ) //empty slice
slice := []int{} //empty slice

http://www.cnblogs.com/kelamoyujuzhen/p/7074779.html

这篇文章中,SortableStrings{}就是SortableStrings的empty值

Go语言——概念的更多相关文章

  1. 数据分析与R语言-概念点(一)

    一.数据分析 1.数据分析的多层模型 常用的统计量 常用的算法 常用的数据分析工具 常见的报表 二.R语言 1.什么是R语言?     R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个 ...

  2. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  3. XML 概述 (可扩展标记语言)

    XML:eXtensible Markup Language  可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的.        功能:            存储数据   ...

  4. [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  5. C语言杂谈(三)存储类别

    本文讨论C语言中的存储类别,包括数据在内存的存储.变量的存储类别.函数的存储类别.生存周期.下图为计算机的存储空间,有寄存器和内存. 一.存储区域 1.寄存器:存放立即参加运算的数据. 2.系统区:存 ...

  6. 21世纪C语言(影印版)

    <21世纪C语言(影印版)> 基本信息 原书名:21st Century C 作者: Ben Klemens 出版社:东南大学出版社 ISBN:9787564142056 上架时间:201 ...

  7. 一套帮助你理解C语言的测试题(转)

    前言 原文链接:http://www.nowamagic.net/librarys/veda/detail/775 内容 在这个网站(http://stevenkobes.com/ctest.html ...

  8. Dart语言入门(一)

    Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...

  9. 为什么入门首选C语言

    对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员. C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在 ...

随机推荐

  1. 树莓派连接显示器后设置ssh服务开机自动开启

    进入命令行,然后执行: cd /boot sudo touch ssh sudo restart -r now 然后就重新启动了,重启好了会有依据提示. 然后可以输入ssh localhost进行一下 ...

  2. 【数据库开发】windows下使用c++调用redis

    不废话,unix下c++调用 redis可以看这个: http://blog.csdn.net/youngqj/article/details/8266177 ==================== ...

  3. tab页签

    <div class="fl" id="newsBox"> <div class="tab1 grayBar"> & ...

  4. Memcached的安装与常用命令

    一.概述 MSM:Memcached-Session-ManagerMemcached是一款高性能.分布式的内存对象缓存系统 二.安装Memcached 在安装Memcached之前,我们需要先安装上 ...

  5. PHP 7 错误处理 Error

    前提:PHP 7 改变了大多数错误的报告方式.不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出. try { echo 2 % 0; // 错误: 分母为0 } ca ...

  6. VBA实现打开Excel文件读取内容拷贝Format且加超链接

    '-------------------一覧取得----------------------------- Sub getRedmineGrid_Click() Dim wb As Workbook ...

  7. nginx 四个主要组成部分

    1.Nginx 二进制可执行文件 由各模块源码编译出的一个文件 2.Nginx.conf 配置文件 控制nginx如何运行 3.access.log 访问日志 记录http请求信息 4.error.l ...

  8. 怎么让桌面存到d盘

    1.找到桌面文件夹. (C:\Users\Administrator) [C盘],[用户].[“”系统账号“(如Administrator)文件夹],[桌面] 2.打开桌面文件夹的属性. 查看位置,修 ...

  9. Spring Boot系列教程十二:Spring boot集成Redis

    一.创建项目 项目名称为 "springboot_redis",创建过程中勾选 "Web","Redis",第一次创建Maven需要下载依赖 ...

  10. stal 安装

    1.1 准备实验环境: 安装系统 1)硬件配置如下 2) 先把光标放到”install CentOS 7”,按 Tab键编辑内核参数,添加 (net.ifnames=0 biosdevname=0) ...