内容简介:推荐阅读
点击上方蓝色“ Go语言中文网 ”关注我们, 领全套 Go 资料 ,每天学习 Go 语言
Go 的类型常量和非类型常量是两个必须要了解的关键概念
不要忘记在文章下面有很多代码示例,因此你要确保点击这些链接并尝试运行这些程序。
你为什么使用常量?
你不想在代码中到处定义 魔法数值 [1] ,于是使用常量来声明它们,并在代码中再次使用它们。
魔法数值是不安全的,你需要准确声明它们,因此,常量是一个安全的选择。除此之外,在代码中看到常量而不是魔法数值也是令人高兴的;人们可以更好地理解代码是怎样的。
我们希望我们可以在使用常量中获得 运行速度上的收益 ,因为,使用常量能够使编译器能够进行更多的优化,它将知道常量的值永远不会改变。
我最喜欢的是非类型化常量。它真是个天才的想法。当使用非类型化常量时,你将获得更多的灵活性和高精度的计算。
类型常量
类型 →Boolean,rune,numerics,或者 string
值 → 编译期时在声明中分配值
地址 → 你无法得到它在内存中的地址(不像变量)
-
你无法在声明常量之后再改变它
-
你不能使用运行时的结构,例如变量,指针,数组,切片,map,结构体,接口,方法调用,或者方法的值。
类型化常量声明
图中定义了一个类型常量 Pi,它的类型为 float64,值为 3.14
运行并且尝试代码示例, 请点击这里 [2]
声明多个常量
运行图中的代码并且检验它的结果, 请点击这里 [3]
在一个代码块中声明多个具有不同类型不同值的常量
-
当一个常量的类型和值没有声明时,它将从上一个常量中得到它。在上面,pi2 从 pi 中获取其类型和值。
-
Age 常量在声明时有一个新的值。并且,它通过赋值为 10 获取默认的类型 int。
-
可以在同一行和 多个变量 [4] 声明中定义多个常量。
非类型化常量
它们有很好的特性,比如高精度的计算以及在所有数值表达式中使用它们而不声明类型等。下面我将介绍这些特性。它们就像 Go 中的通配符。
理想类型 → 与 Go 通常类型不同的隐藏类型。
理想值 → 存在于理想值空间中,并且具有默认类型。
默认类型 → 取决于理想值。
非类型化常量的声明
声明了一个非类型化的常量 Pi,并且为它赋值为 3.14,那么它默认的类型就是 float。
当需要它的类型的时候,图片左侧(期望类型)将转化为右边的类型(预先声明的类型)
尝试代码,点击 这里 [5]
高精度计算
如果常量只停留在非类型化常量领域,那么它没有速度的限制!但是,当将常量赋值给变量进行使用时,速度就有限制了。
当你将其分配给变量时,非类型化常量的精度会降低,其默认类型会转换为 Go 的 普通类型 [6] 。
运行代码示例, 请点击这里 [7]
灵活的表达方式
你可以使用非类型化常量临时从 Go 的强类型系统中逸出,直到它们在类型要求表达式中的计算为止。
我在 代码中 [8] 一直使用它们时,会避免在不需要强类型时声明它们。所以,如果你不真正需要常量,就不要用它声明类型。
运行代码示例
-
Understand when and how to use untyped constants [9]
-
We can assign an untyped constant to any numeric-type variable [10]
常量作用范围
一个常量只能在它的声明的作用域内使用。如果你在更内部的作用域内以同样的名字再声明一个常量,那么这个常量仅仅在内部作用域内可以使用,并且在此作用域内将覆盖外部声明的常量。查看代码示例, 请点击这里 [11]
via: https://blog.learngoprogramming.com/learn-golang-typed-untyped-constants-70b4df443b61
作者: Inanc Gumus [12] 译者: xmge [13] 校对: polaris1119 [14]
本文由 GCTT [15] 原创编译, Go 中文网 [16] 荣誉推出
参考资料
魔法数值: https://en.wikipedia.org/wiki/Magic_number_%28programming%29
请点击这里: https://play.golang.org/p/mrnqxa8Kic
请点击这里: https://play.golang.org/p/mBoqG58z_e
多个变量: https://blog.learngoprogramming.com/learn-go-lang-variables-visual-tutorial-and-ebook-9a061d29babe#4176
这里: https://play.golang.org/p/L5UC3XgYFk
普通类型: https://golang.org/ref/spec#Boolean_types
请点击这里: https://play.golang.org/p/4ODv0n_stw
代码中: https://github.com/inancgumus/myhttp/blob/master/get.go#L12
Understand when and how to use untyped constants: https://play.golang.org/p/2cgFoB4rYD
We can assign an untyped constant to any numeric-type variable: https://play.golang.org/p/7-VMh5egC-
请点击这里: https://play.golang.org/p/c3-GF_a5iI
Inanc Gumus: https://www.activestate.com/blog/author/peteg/
xmge: https://github.com/xmge
polaris1119: https://github.com/polaris1119
GCTT: https://github.com/studygolang/GCTT
Go 中文网: https://studygolang.com/
推荐阅读
喜欢本文的朋友,欢迎关注“ Go语言中文网 ” :
Go语言中文网启用微信学习交流群,欢迎加微信: 274768166 ,投稿亦欢迎
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java语言程序设计(基础篇 原书第10版)
[美]粱勇(Y.Daniel Liang) / 戴开宇 / 机械工业出版社 / 2015-7 / 85.00元
《Java语言程序设计(基础篇 原书第10版)》是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象编程、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书以示例讲解解决问题的技巧,提供大量的程序清单,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学技术解决实际应用开发中遇到的问题。您手中的这本是其中的基础篇,主要介绍了基本程序设计、语法......一起来看看 《Java语言程序设计(基础篇 原书第10版)》 这本书的介绍吧!