教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 什么是Golang类型

什么是Golang类型

发布时间:2023-03-10   编辑:jiaochengji.com
教程集为您提供什么是Golang类型等资源,欢迎您收藏本站,我们将为您提供最新的什么是Golang类型资源

Go是一种强类型语言,而Type是生命。 该语言具有丰富的类型,并且对类型扩展有很好的支持。 类型提供完整性。

在这篇文章中,我将分享一些原始类型以及Go如何处理它们。

在计算机中,一切都是0或1,只有这2个值用于表示我们想要的任何值。
0或1的排列表明值是什么。

以某个内存位置的字节值为例:


它是什么 ? 您需要输入类型信息。

如果type为int,则值为10;如果type为enum,则具有其他值。

类型信息告诉我们有关值和大小的信息,例如,如果类型是布尔值,则表明它是单字节值。

有关Go支持的类型的信息,请参见Lang Spec Types页面。

如何声明变量?

var variablename type

上面两个都声明了一个变量,但是初始化它的方式却大不相同。

Var使用其类型的ZERO值创建和初始化,零值是非常特殊的,它使代码错误免费且干净! 没有空检查。

零值基于Type,因此对于整数类型,它为零,布尔值是false,字符串则为空。

Go具有类似int的类型,该类型根据基础架构获取大小,例如它将是4字节(即32位弧)或8字节(64位弧)。 这也是机械同情底层平台的一个很好的例子。


变量声明的示例:

var value int
	var f float64
	var b bool
	var by byte
	var name string
	var x rune

	//Variable are declared and initialized by compiler to ZERO VALUE of its type
	//https://golang.org/ref/spec#The_zero_value

	fmt.Printf("value %T -> (%v) \n", value, value)
	fmt.Printf("f %T -> (%v) \n", f, f)
	fmt.Printf("b %T -> (%v) \n", b, b)
	fmt.Printf("by %T -> (%v) \n", by, by)
	fmt.Printf("name %T -> (%v) \n", name, name)
	fmt.Printf("x %T -> (%v) \n", x, x)

	fmt.Println("*******************")

	value1 := 10
	f1 := 3.14
	b1 := true
	name1 := "Say Hello"
	x1 := 100
	fmt.Printf("value %T -> (%v) \n", value1, value1)
	fmt.Printf("f %T -> (%v) \n", f1, f1)
	fmt.Printf("b %T -> (%v) \n", b1, b1)
	fmt.Printf("name %T -> (%v) \n", name1, name1)
	fmt.Printf("x %T -> (%v) \n", x1, x1)


内置类型的别名

这是一个非常强大的功能,它允许通过添加行为来扩展内置类型。
类型别名的示例:

//Create Alias for int type
type RichInt int

func main() {

	var ri RichInt
	ri = 100

	fmt.Println("Value of rich int", ri)
	fmt.Println("Convert to Int", int(ri))
	fmt.Println("From int to Rich Int", RichInt(100))
	fmt.Println("Binary Value", ri.toBinary())
}


在上面的示例中,RichInt具有toBinary函数,该函数返回二进制值。 稍后我将分享探索类型方法时如何扩展类型。

转换与转换
转换是魔术,它允许将一种类型隐式转换为另一种类型。 在long / int强制转换或double / float中,您在Java中丢失了多少次值? Go具有转换的概念。 您将x明确地转换为y类型,并以安全为代价来支付额外的内存。

Go lang 规范有一些很好的例子。

一些实际的自定义类型
Go lang支持Struct类型,它是纯值类型,没有任何行为干扰。 它提供了对内存布局的控制,您可以选择非常紧凑的内存布局以避免填充或根据需要添加填充。

可以如下声明结构:

type person struct {
 firstName string
 lastName  string
        age int
}

一旦定义了struct,就可以创建struct类型的值。
只记住那是价值而不是对象!

可以使用以下代码创建值:

var p1 person

上面的代码创建了一个值,并将其初始化为零值,将字符串初始化为空值,并将int初始化为0。
处理p1时不需要空检查,因为它已初始化为零值。

短声明可用于指定非零或其他值:

p2 := person{firstName: "James", lastName: "Bond", age: 35}

零值和方便的创建价值的方法消除了Go中具有构造函数或析构函数的需要。
您现在可以开始看到价值的力量。 没有构造函数/析构函数/或复杂生命周期的开销。

我知道您会对特殊的初始化代码或所需的清理代码有疑问?

行为的处理方式非常不同,我们将在以后的文章中详细介绍。

结构也可以嵌套,零值或简短声明就像魔术一样!

我们将创建其他结构:

ype address struct {
 address1 string
 address2 string
 city     string
}

type contact struct {
 landLine int
 mobile   int
}

type person struct {
 firstName      string
 lastName       string
 age            int
 add            address
 contactDetails contact
}

p3 := person{firstName: "James", lastName: "Bond", age: 35,
  add:            address{address1: "30 Wellington Square", address2: "Street 81"},
  contactDetails: contact{mobile: 11119999}}

翻译自: https://www.javacodegeeks.com/2019/01/golang-types.html

到此这篇关于“什么是Golang类型”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang判断变量的类型
学习golang开始前的准备工作
golang面试题第六天
20.不要在函数参数中使用空接口
关于Golang的那些事(六) -- 接口
Golang设计模式之原型模式
golang接口初解析
关于Golang的介绍
go interface类型转换_Golang系列5 | Interface接口&map类型
golang 初始化并赋值_Golang | 既是接口又是类型,interface是什么神仙用法?

[关闭]
~ ~