• 从一个例子开始

package maintype T1 []int
type T2 []intfunc main() {var v1 []intvar v2 []intvar v3 T1var v4 T2v2 = v1v3 = v1v2 = v3v4 = v3
}

思考运行结果。

  • 先把官方手册翻译一下

A type determines a set of values together with operations and methods specific to those values.
A type may be denoted by a type name, if it has one, or specified using a type literal, which composes a type from existing types.
The language predeclares certain type names. Others are introduced with type declarations.
Composite types—array, struct, pointer, function, interface, slice, map, and channel types—may be constructed using type literals.
Each type T has an underlying type: If T is one of the predeclared boolean, numeric, or string types, or a type literal, the corresponding underlying type is T itself.
Otherwise, T's underlying type is the underlying type of the type to which T refers in its type declaration.

类型确定一组值以及特定于这些值的操作和方法。一个类型可以用一个类型名来表示,或者用已存在类型组合成一个类型字面量来指定。
go语言预声明了一些类型名,其他的是通过类型声明引入的。(类型声明分两种:别名声明 和 类型定义)。
符合类型—array,struct,pointer,function,interface,slice,map,channel—可以通过类型字面量来构造。
每个T类型,都拥有一个基础类型:如果T是预声明的boolean,numeric,string类型,或者是一个类型字面量,它对应的基础类型就是它自己。
否则,T的基础类型是T在其类型声明中引用的类型的基础类型。

  • 有名类型 和 无名类型

叫做Named Type 和 Unnamed Type,翻译过来够生硬的。

内置类型 bool,int,int8,float,float32,string  和  类型定义 type names []string,type salary float32  属于 Named Type。

[10]int,[]string,map[int]string,interface{},struct{}等类型字面量  就是 Unnamed Type。Unamed type是基于Named type声明的复合类型。

Named type 可以定义自己的方法 (type Books  []string,可以给 Books 绑定一些方法)。

Unnamed type 不可以定义自己的方法(即使用  type Books =  []string 这种别名声明 也无法给Books绑定方法)。

  • 基础类型

每个T类型,都拥有一个基础类型

内置类型和类型字面量的基础类型是它本身,比如:

bool  的基础类型是  bool
string  的基础类型是  string
[]int  的基础类型是  []int
struct{}  的基础类型是  struct{}

否则,T的基础类型是T在其类型声明中引用的类型的基础类型,比如:

type age int
type nianling age
type ages []age
type agearr ages

age的引用类型是int,int的基础类型是自己,所以age的基础类型是int。
nianling的引用类型是age,age的基础类型是int,所以nianling的基础类型是int。
ages的引用类型是[]age,[]age的基础类型是自己,所以ages的基础类型是[]age。
agearr的引用类型是ages,ages的基础类型是[]age,所以agearr的基础类型是[]age。

直接用相同Unnamed type声明的变量的类型都相同,而对于Named type变量而言,即使它们的底层类型相同,它们也是不同类型:

type T1 []int
type T2 []intfunc main() {var v1 []intvar v2 []intvar v3 T1var v4 T2v2 = v1   //ok 两个Unnamed Typev3 = v1   //ok Unnamed Type赋值给Named Typev2 = v3   //ok Named Type赋值给Unnamed Typev4 = v3   //cannot use v3 (type T1) as type T2 in assignment
}

v1,v2是相同Unnamed Type类型的变量,v3和v4是不同Named Type类型的变量,两个不同的Named Type数据之间是不能互相赋值的。

赋值实际上是一种copy,基础类型相同是赋值成为可能的基础,但是Named Type类型还可能被绑定了各种方法,这些部分元信息是不可控的,所以go不支持不同的Named Type类型之间赋值。

另外 当使用 type 定义一个新类型,它不继承原类型的方法集,如果想继承,就是使用常见的结构体匿名字段的方式。

原文连接  Go 迷思之 Named 和 Unnamed Types

转载于:https://www.cnblogs.com/adarking/p/10556472.html

golang 类型说明相关推荐

  1. golang类型断言的使用(Type Assertion)

    第一部分 首先,转自https://studygolang.com/articles/3314对断言的基本介绍 golang的语言中提供了断言的功能.golang中的所有程序都实现了interface ...

  2. 四、golang类型讲解--go语言学习笔记

    擅自使用了七牛大牛们的PPT资料,希望不要怪罪,这里谢谢大牛们的分享. 映射 map 一个"键-值"对 关键点:注意并发读写情况,上锁 不能对未初始化的 map 进行写,会抛异常( ...

  3. Golang类型转换模块 - gconv

    原文地址:https://gfer.me/util/gconv/index gf框架提供了非常强大的类型转换包gconv,可以实现将任何数据类型转换为指定的数据类型,对常用基本数据类型之间的无缝转换, ...

  4. golang类型断言理解[go语言圣经]

    类型断言 个人理解 这个东西看了好久才看懂,然后还借鉴了一下其他的文章: Go 语言中的类型断言是什么? 虽然这个借鉴的文章没有讲全,讲透,但是让我理解go语言圣经里面写的内容起到了帮助 我的理解关键 ...

  5. golang 类型断言

    类型断言 文章目录 类型断言 空接口.(具体类型) 非空接口.(具体类型) 空接口.(非空接口) 非空接口.(非空接口) Type Switch 我们已经知道接口可以分为空接口与非空接口两类.相对于接 ...

  6. golang类型断言及检测其是否断言成功

  7. Golang类型转化方法汇总

    // 访问嵌套的值需要一系列的转化. strs := dat["strs"].([]interface{}) str1 := strs[0].(string) fmt.Printl ...

  8. Deep Learning部署TVM Golang运行时Runtime

    Deep Learning部署TVM Golang运行时Runtime 介绍 TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型.TVM支持来自Te ...

  9. python学会后再学c_目前python熟练 ,想再学golang 需要先学c吗?

    不需要先学C golang借鉴了很多语言的优秀特质,但也自成一体,相对C来说更加简单.工程化. 会python,学习golang很简单. 每种通用语言的基本都是类似的,都要能够处理数字.字符串.数组. ...

最新文章

  1. LTE-TDD与LTE-FDD技术比较
  2. [转:Pro ASP.NET MVC 5中的例子]使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore...
  3. java分享第六天(冒泡排序)
  4. android cliptopadding java代码_android:clipToPadding属性的分析——以ListView的别样padding为例...
  5. 关于codeblocks插件(持续更新)
  6. 无法读取内存属于错误吗_索佳全站仪错误信息讲解
  7. GitHub上传文件的过滤规则 -- windows下
  8. Verizon:2013年数据破坏调查报告(DBIR)【更新版】
  9. CentOS7源码安装Python3
  10. python汉化版下载-Python中文版
  11. windows server 2019 安装CA-证书服务器
  12. IP归属地显示的简单实现代码
  13. ssh登陆忽略known_hosts文件(ssh 登陆提示Host key verification failed.)
  14. Unicable技术在卫星接收方案设计中的应用
  15. canvas字体加粗
  16. 一文带你搞懂C#多线程的5种写法
  17. 手机通讯录系统(三层架构+JDBC+MySQL)
  18. oracle查询结果加上总计
  19. 【转】本人常用资源整理
  20. 第二届“马栏山”杯国际音视频算法大赛高分攻略

热门文章

  1. 干货分享:vue2.0做移动端开发用到的相关插件和经验总结(2)
  2. 3-AIV--使用ContentProvider获得所有图片路径
  3. 【Python】从0开始写爬虫——豆瓣电影
  4. 思维习惯埋下的陷阱:在eVC中使用Slider、Spin等控件
  5. CCS实例,网页栏目
  6. python3 socketserver源码解析_解读python中SocketServer源码
  7. 交流信号叠加直流偏置_接收无线电信号利器,一款无线有源环形收音机接收天线放大器...
  8. 2-4MySQL数据库安装与初始化
  9. 2-3实战分类模型之数据的读取与展示
  10. mysql jar jdk1.6_搭建非安装版mysql+jdk1.6+tomcat6