第二章 变量、常量和数据类型 (7)

在任何程序中都会存在一些变量有着相同的内部结构,但是却表示完全不同的概念。 一个类型声明语句创建了一个新的类型名称,和现有类型具有相同的底层结构。

type 类型名字 底层类型

 

例如:

type Age int    //年龄

type Height int //身高

type Grade int  //分数

 

type绝不只是对应于C/C++中的typedef,它不是用于定义一系列的别名。更关键的是,它定义了一系列互不相干的行为特征:通过这些互不相干的行为特征,本质上相同的事物表现出不同事物的特征:整数还是整数,但年龄却不是高度也不是分数。我们可以分别为AgeHeightGrade定 义出下列不同的行为(表示为方法或者函数):

type Age int    //年龄

type Height int //身高

type Grade int  //分数

 

func (a Age) IsOld() bool {

// 超过50岁算老年

return a > 50

}

func (h Height ) NeedTicket() bool {

// 高于120cm需要买票

return h > 120

}

func (g Grade) Pass() bool {

// 60分及格

return g >= 60

}

 

类型声明语句一般出现在包一级,因此如果新创建的类型名字首字母大写,则在包外可以使用。对于每一个类型T,都有一个对应的类型转换操作T(x),用于将x转换为T类型。

package main

 

import (

    "fmt"

)

 

type Integer int

 

func (a Integer) Less(b Integer) bool {

    return a < b

}

func main() {

    var a Integer = 1

    fmt.Println(a.Less(2))

    var b int

    //不能直接赋值,需要T(x)类型转换

    b = a

    b = int(a)

    fmt.Println(b)

}

 

 

2.6作用域

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsfxs.html