【Go语言】【4】GO语言类型和为类型增加方法

简介:

一、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...”

wKioL1TiAcDQHJH6AAG7seiSLsU427.jpg

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

wKiom1TiASHB-a3sAAJ2KHXpeq8293.jpg

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

package main


import "fmt"


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


func main() {

     var a intNick

     fmt.Println(a)

}

wKioL1TiAy-CFkzTAAH9UYHlkeY812.jpg

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秒

wKiom1TiBRrz-3H3AAIKv42L1Xw211.jpg


二、为类型增加方法 

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

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

/**

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

 */

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

return nick < param

}

wKiom1TiCKWREQZ6AAJNmWu_GUM836.jpg

2、GO语言的方法定义

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

    //...略

}

其中func是方法修饰符

methodname是方法名

param1param2是方法入参

paramType1paramType2是方法入参的参数

result1result2是返回值

resultType1resultType2是返回值的类型


【备注】:

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))

}

wKiom1TiEHWQtr61AAKOsAf9V0U172.jpg

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

wKiom1TiELPiMFxSAAJ0QoVo-rg843.jpg


三、题外话

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

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

func (nick intNick) isLessThanParam(param intNick) bool 

{

    return nick < param

}


wKioL1TiEzuyC-yRAALIMKDdl3M070.jpg




     本文转自qingkechina 51CTO博客,原文链接:http://blog.51cto.com/qingkechina/1614711,如需转载请自行联系原作者





相关文章
|
5天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
33 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
25天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
37 7
|
25天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
25天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
99 71
|
24天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
103 67
|
25天前
|
存储 Go
go语言中映射
go语言中映射
36 11
|
26天前
|
Go 索引
go语言使用range关键字
go语言使用range关键字
29 7
|
26天前
|
Go 索引
go语言修改元素
go语言修改元素
29 6
|
3天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
13 0
|
17天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数