首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go to Beginners第11部分-Go中的自定义类型

在今天的文章中,我们将看到如何在Go中创建自定义类型!

Go中的第一个自定义类型代码

我们已经看到Go可以存储许多类型的值,比如字符串,布尔值,整数等等。但有时我们需要一个更好的变量或类型的意义。

想象一下,我们有一个应该存储我们想要在这里学习的语言的程序!

在第一个例子中,我们只需创建一个类型为string的变量来保存我们的语言:

package main

import "fmt"

var language string

func main() {

language = "Java"

fmt.Println(language)

}

如果你运行这个代码,结果将是:

Java

挺容易!但是我们可以通过创建一个自定义类型来获得更有意义的变量。这个自定义类型将是一个类似字符串或整数的例子,但是用我们想要的名字。我们来看看如何创建一个名为Language的自定义类型

type Language string

注意你的自定义类型应该有一个内建类型,在这种情况下,Language类型是一个字符串。

我怎样才能使用它?

package main

import "fmt"

type Language string

func main() {

language := Language("Java")

fmt.Println(language)

}

如果你运行这个代码,结果几乎是一样的:

Java

简单,不是吗?想象一下,你应该存储一个框架,以学习属于该语言。我们来创建另一个自定义类型:

type Framework string

完整的代码可以是:

package main

import "fmt"

type Framework string

type Language string

func main() {

language := Language("Java")

framework := Framework("Spring 5")

fmt.Println("Language to learn:", language)

fmt.Println("Framework to learn:", framework)

}

后运行此代码,我们将有:

Language to learn: Java

Framework to learn: Spring 5

你可以问:

但在这种情况下使用自定义类型或内置类型有什么区别?

这种情况的区别在于语义更清晰。你正在使用语言类型,不只是一个简单的字符串,代码让你知道!

在Go中使用自定义类型

我们可以在自定义类型中进行操作。在我们的示例中,语言类型被键入为字符串,所以这个自定义类型将支持字符串支持的所有操作。

我们来看一个例子:

package main

import (

"fmt"

)

type Language string

func main() {

language := Language("Java")

fmt.Println(language)

language = language + " - Ruby"

fmt.Println(language)

}

如果你运行这个代码,你将会拥有:

Java

Java - Ruby

正如你所看到的,我们可以连接一个语言类型,因为它是一个字符串。

具有函数的自定义类型的操作

允许由自定义类型os支持的操作,因为此操作来自内置类型。

但是,一个函数,期望一个字符串,你传递给它一个自定义类型是作为一个字符串类型?

时间代码挑战:

package main

import "fmt"

type Language string

func main() {

language := Language("Java")

fmt.Println("Language:", language)

print(language)

}

func print(value string) {

fmt.Println("Value:", value)

}

听起来不错,对吧?你只是把一个语言类型,即一个字符串下的字符串,传递给一个需要一个字符串的函数。

但是,如果你运行这个代码,你将会有下面的错误:

cannot use language (type Language) as type string in argument to print

是的,我们不能这样做!如果函数期望一个字符串,那么我们应该传递一个字符串给它!

在这种情况下,您应该将自定义类型显式转换为字符串:

print(string(language))

与Go中的自定义类型进行比较

想象一下,现在我们的语言有一门课程,应该在特定的时间完成。为此,我们创建两个自定义类型来表示时间:

分钟

小时

package main

import "fmt"

type Minute int

type Hour int

func main() {

minutes := Minute(70)

hour := Hour(10)

if minutes > 60 {

fmt.Println("Minutes is greater than 60")

}

if hour

fmt.Println("Hhours is greater than 15")

}

}

如您所见,我们可以将自定义类型与其内置类型进行比较。

但是这是一个问题:即使使用相同的内置类型,您也无法在Go中比较不同的自定义类型:

我们好奇,所以让我们试试吧!

package main

import "fmt"

type Minute int

type Hour int

func main() {

minutes := Minute(70)

hour := Hour(10)

if minutes > hour {

fmt.Println("This will never be executed")

}

}

如果你运行这个代码,你会得到这个错误:

invalid operation: minutes > hour (mismatched types Minute and Hour)

Go!在下一篇文章中:第12部分 - 在Go中使用Struct,我们将看看如何在Go中使用Struct

而已!我希望对你有用!谢谢

不要忘记看到并在GitHub上分发项目!

跟随我们保持最新!\ O /

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180207A0L8Z000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券