一、GO语言的类型

GO语言中内置了如下基础类型:

整型:byte(int8)、int16、int、uint等

浮点型:float32、float64

复数类型:complex64、complex128

布尔类型:bool

字符类型:rune

字符串:string

错误类型:error

同时GO语言也支持下面的复合类型:

指针

数组

切片:slice

集合:map

通道:chan

结构体:struct

接口:interface

上看下看左看右看,怎么没有看到double类型呢?同时还有几个陌生的面孔,像rune、error、slice、chan等,呵呵,GO的确没有提供double类型,它认为浮点类型足够表达double的范围,所以就把double取消了;

另外,整型也进行了划分,像int8、int16、int、uint、uintptr等,其中int8与byte是等价的,可以认为byte是int8的别名,对了,给类型取别名可是GO的特别本事哟~~~

1、按Java习惯先创建workspace目录,我把这个workspace放到了GOROOT环境变量下,里面分别再创建src、bin、pkg三个目录

2、打开Sublime text,选择“File > Open Folder...”

3、在弹出的窗口中选择workspace目录

4、在Sublime text中输入如下代码

package main

import "fmt"

type intNick int //为int取个intNick别名

func main() {

var a intNick

fmt.Println(a)

}

5、选择“File > Save with Encoding > UTF-8”,文件名取为“nick.go”

6、type intNick int表示为int取了一个别名,叫intNick

var a intNick表示定义一个变量a,它的类型是intNick,缺省值为0

fmt.Println(a)表示输出变量a的值

7、按ctrl + b,输入go run nick.go后回车,可以看到运行结果:输出0,耗时1.0231298秒

二、为类型增加方法

在上面的例子其实不仅仅是取一个别名,而是重新定义了一个类型,我们可以为这个全新的类型增加方法

1、在nick.go中增加如下代码

/**

* 为intNick类型增加一个isLessThanParam的方法

*/

func (nick intNick) isLessThanParam(param intNick) bool {

return nick < param

}

2、GO语言的方法定义

func methodname(param1 paramType1, param2 paramType2) (result1 resultType1, result2 resultType2){

//...略

}

其中func是方法修饰符

methodname是方法名

param1、param2是方法入参

paramType1、paramType2是方法入参的参数

result1、result2是返回值

resultType1、resultType2是返回值的类型


【备注】:

GO语言比较有意思的是,它可以返回多个值,这点是程序员一直梦寐以求的,但其它语言所不支持的


在《[3]GO语言常量与变量》中曾经说过:GO语言很符合人的正常思维,代码想怎么写就怎么写,无论怎么写都符合GO的语法。

2.1 假如param1和param2的类型一样,都是paramType,那么很自然地可以把方法简写为

func methodname(param1,param2 paramType) (result1 resultType1, result2 resultType2){

//...略

}

2.2 假如result1和result2的类型一样,都是resultType,那么方法还可以简写为

func methodname(param1, param2 paramType) (result1, result2 resultType){

//...略

}

2.3 假如参数和返回值只有一个,那么方法可以简写为

func methodname(param paramType) (result resultType){

//...略

}

2.4 既然只有一个返回值,直接返回一个返回值的类型就得了,那么方法可以简写为

func methodname(param paramType) resultType{

//...略

}

以上表达方式都是正确的,所以GO语言是简约而不简单

3、为类型增加的方法与一般方法的区别

在2中介绍了GO语言是怎么定义方法的,那么我们为定义的全新类型增加的方法与一般方法的区别在什么地方呢?

  • 为类型增加方法:

func (nick intNick) isLessThanParam(param intNick) boolean {

return nick < param

}

  • 一般方法:

func methodname(param paramType) resultType{

//...略

}

明眼人一下就看出来了——在方法名前增加了(nick intNick),这表示该方法是用于nick对象的,nick对象的类型为intNick。

所以在main中使用该方法时就可以参照面向对象的方式进行编码了:

// 定义对象a,对象是intNick类型的对象。这就像有一个Integer类,它的实例是a

var a intNick = 8

// 调用对象a的isLessThanParam()方法

a.isLessThanParam(9)

4、GO到底是面向过程的,还是面向对象的,还是面向函数的?

这是一个很好的话题,在我看来它都有,在51cto的视频教学中,无闻老师提及到了GO是面向类型的编程,很精辟的一个归纳。

5、修改main方法

func main() {

var a intNick = 8

fmt.Println(a.isLessThanParam(9))

}

6、按ctrl + b,输入go run nick.go后回车,可以看到运行结果:输出true

三、题外话

1、尽管byte是int8的别名,但在常规的开发过程中,还是建议不要用int8指定变量的类型,这样容易导致移植困难

2、GO语言对代码的排列方式也进行了语法级别的检查,动手编写上面的代码会发现,函数定义时花括号必须在这一行的后面,如果把花括号新起一行,则会出现unexpected semicolon or newline before {错误,如下:

func (nick intNick) isLessThanParam(param intNick) bool

{

return nick < param

}

【Go语言】【4】GO语言类型和为类型增加方法相关推荐

  1. C语言,C#,Java,JavaScript之强类型与弱类型

    奇葩的我今天想到一个坑爹的问题,都说Java是强类型的语言,JavaScript是弱类型的语言. 嗯嗯,那初学时候的C语言呢? 呵呵哒,突然觉得短路了.说Java是强类型的语言是因为遇到这样的情况: ...

  2. 【Groovy】Groovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )

    文章目录 前言 一.Groovy 动态语言 二.Groovy 中的变量自动类型推断及动态调用 三.Java 中必须为变量指定其类型 前言 Groovy 是动态语言 , Java 是静态语言 ; 一.G ...

  3. c语言里变量列表,嵌入式C语言里的土豪们之变量类型

    嵌入式C语言里的土豪们之变量类型本文引用地址:http://www.eepw.com.cn/article/184332.htm 上一篇我们谈到了运算奢华大户除法(详见<嵌入式C语言里的土豪们之 ...

  4. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  5. 强/若类型语言 动/静态语言

    弱/强类型指的是语言类型系统的类型检查的严格程度.动/静态指的是变量与类型的绑定方法. 弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等.强类型语言一般不允许 ...

  6. C语言变量的定义包括变量存储类型和变量的什么?

    C语言变量的定义包括变量存储类型和变量的名称.C语言定义变量的格式:"数据类型 变量名;","数据类型"表示想要存储什么类型的数据,"变量名" ...

  7. 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析

    编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言概念辨析 转自:https://blog.csdn.net/u010533843/article/details/76215487 编译型和解 ...

  8. PHP判断浏览器类型和浏览器语言(附各国语言简写代码)

    用php语言来判断浏览器类型其实很简单. 因为浏览器在和服务器连接时候都会先发送一些包含自己信息的内容(浏览器类型.语言啦). 这里我们主要分析的是_SERVER["HTTP_USER_AG ...

  9. C++语言学习(十九)——C++类型识别

    C++语言学习(十九)--C++类型识别 一.C++类型识别简介 1.C++类型识别简介 C++是静态类型语言,其数据类型是在编译期就确定的,不能在运行时更改. C++语言中,静态类型是对象自身的类型 ...

最新文章

  1. Hadoop hdfs完全分布式搭建教程
  2. 中国人民银行:关于防范代币发行融资风险的公告
  3. 笔记-项目质量管理-七种基本质量工具
  4. HDU 1180 诡异的楼梯
  5. 电子计算机场地通用规范_最全的视频监控系统施工规范要求
  6. 推荐几个最近Star过的Github仓库
  7. 【CodeForces - 722C】Destroying Array(并查集,时光倒流)
  8. spring boot maven项目返回值乱码的解决方法
  9. maven本地安装jar
  10. Sphinx的配置和使用
  11. 用python重温统计学基础:描述性统计分析
  12. 9.微服务设计 --- 安全
  13. 条带装箱问题 Strip packing problem是什么
  14. winscp自动执行脚本
  15. 免费下载百度文库文档、免注册、免登录、免财富值 - 帮手网-云下载
  16. Java练习题2-基础(含解析)
  17. Python学习笔记(三)列表
  18. react router BrowserRoute部署后页面空白问题
  19. 网络和共享中心 服务器运行失败,win10网络共享失败提示共享依赖服务无法启动的解决办法...
  20. 【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

热门文章

  1. Photoshop CS6软件安装教程
  2. Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
  3. 华为emui10是鸿蒙,昨日,华为EMUI10,鸿蒙系统正式发布!
  4. java判断星期天_java实现一个月的最后一个星期天
  5. 基于Java的RDMA高性能通信库(一):IBM jVerbs库
  6. louvian算法 缺点 优化_机器学习中的优化算法(1)-优化算法重要性,SGD,Momentum(附Python示例)...
  7. 简单算法的举例c语言,计算机科学与技术系C语言程序设计22简单算法举例.PPT
  8. java $ 用法_Java的Volatile实例用法及讲解
  9. 上如何刻字_校园石阶上被人刻了1700多个字?!这次网友却说好
  10. 在公网上的Linux,我的一些配置分享