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

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

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

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

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

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

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

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. 【Leetcode_easy】1089. Duplicate Zeros

    problem 1089. Duplicate Zeros 题意: solution: 其中关于虚拟新数组的下标的计算还是有点迷糊... class Solution { public: void d ...

  2. 【Leetcode_easy】700. Search in a Binary Search Tree

    problem 700. Search in a Binary Search Tree 参考1. Leetcode_easy_700. Search in a Binary Search Tree; ...

  3. .rpt 文件怎麽打開?Crystal Reports 打開.rpt失敗 ?

    .rpt   是SAP Crystal Reports 製作出來的檔案的後綴名, 可以通過 SAP Crystal Reports Viewer 打開,也可以直接用記事本(notepad / Note ...

  4. markdown语法(测试自用)

    Markdown语法主要分为几大部分:标题.段落.区块引用.代码区块.强调.列表.分割线.链接.图片.反斜杠.符号'`' 1.标题 两种形式 1)使用 = 和 - 标记一级标题和二级标题 一级标题 二 ...

  5. ASP.NET MVC4中的异步控制器

    在抛弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需要再蛋疼的给每个Action写两个方法, 也无需傻傻的手动对异步Action计数器增减了(AsyncMa ...

  6. json 和对象互相转换

    json 和对象互相转换 导入 Jar 包: import com.fasterxml.jackson.databind.ObjectMapper; Maven 地址: <!-- https:/ ...

  7. Android虚拟机安装apk

    将apk放入platform-tools 打开虚拟机之后 进入该目录执行命令

  8. java项目报错 :A class file was not written. The project may be inconsistent...

    问题: 打开ecplise,发现我的几个项目报错,上午还用的好好的,整我一脸懵,出现那么多错误还都是一种问题,错误提示翻译过来是:(类文件找不到) : 问题经过具体描述: 不只是在我的springMV ...

  9. Netty框架原理

    用这张图表示的就是一个基本的Netty框架 通过创建两个线程池,一个负责接入, 一个负责处理 public class Start { public static void main(String[] ...

  10. 序列变换(HDU-5256)【LIS】

    题目链接:https://vjudge.net/problem/HDU-5256 题意:给一个数列,每一个数都不相同且为整数,现求,最少需要修改多少次才能使该数列为严格上升的. 思路:首先,对于一个严 ...