Go 语言快速入门指南:第二篇 变量与常量 -璇泰初网络
写点什么

Go 语言快速入门指南:第二篇 变量与常量

作者: ​https://unbug.github.io/codelf/​​​,比如我们想命名 name,可以搜索看看其他程序员如何命名 ​​name​​ 相关的变量名。



定义多个变量

Go 提供了定义多个变量的简写方式:

var (  a = 3  b = 4  c = 5)
复制代码

常量

什么是常量

常量就是不变的量,恒定的量。Go 当然支持常量。常量的本质其实也属于基本类型,如布尔型、字符串或数字。


常量可以保证在编译阶段就计算出表达式的值,并不需要等到运行时,从而使得编译器可以在任何时候就知道这个值。


常量的创建方式与创建变量的结构相同,但我们使用 const 关键字代替 var 关键字:

package main
import "fmt"
func main() { const hello string = "Hello World" fmt.Printlb(x)}
复制代码

如果我们更改一个常量的话,比如这样:

const hello string = "Say Hello to you"hello = "Hello, Bro"
复制代码

会在编辑器中得到这样的错误,“不能给 hello 赋值(声明了常量)”:

Variables\main.go:6:8: cannot assign to hello (declared const)
复制代码

常量是在程序中复用而不用每次都重新写的好方法。 例如 math 包中的圆周率 Pi 和自然常数 E 被定义为一个常数。

fmt.Println(math.E)// 结果为:2.718281828459045
复制代码

既然,我们提到了圆周率,不如来写一个程序计算一下圆的面积和周长:

package main
import ( "fmt" "math")
func main() { const ( hello string = "Hello," pi float64 = math.Pi ) var ( name string r float64 ) fmt.Print("Enter your name: ") fmt.Scanf("%s", &name) fmt.Println(hello + name) fmt.Print("让我们来学习圆,请输入圆的半径: ") fmt.Scanf("%f", &r) fmt.Printf("半径为%f的圆周长: %f\n", r, 2*pi*r) fmt.Printf("半径为%f的圆面积: %f", r, pi*r*r)}
复制代码

在终端中运行一下代码,如下结果:

$ go run main.goEnter your name: Yuzhou1suHello,Yuzhou1su让我们来学习圆,请输入圆的半径: 3半径为3.000000的圆周长: 18.849556半径为3.000000的圆面积: 28.274334
复制代码

定义多个常量

跟定义多个变量一样,使用关键字 const 后跟括号,每个常量都定义在单独行上。

const (        hello string  = "Hello,"        pi    float64 = math.Pi    )
复制代码

常量生成器 iota

常量的声明可以使用常量生成器 ​​iota​​,可以创建一系列相关的值,而不用逐个值显式写出。

在 ​​iota​​ 中,从 0 开始取值,逐个加 1,例如定义一星期,从 Sunday 开始,其值为 0。

package main
import "fmt"
type Weekday int
const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday)
func main() { fmt.Printf("Sunday 是一周的第 %d 天\n", Sunday) fmt.Printf("Monday 是一周的第 %d 天\n", Monday) fmt.Printf("Tuesday 是一周的第 %d 天\n", Tuesday) fmt.Printf("Wednesday 是一周的第 %d 天\n", Wednesday) fmt.Printf("Thursday 是一周的第 %d 天\n", Thursday) fmt.Printf("Friday 是一周的第 %d 天\n", Friday) fmt.Printf("Saturday 是一周的第 %d 天", Saturday)}
复制代码

运行结果:

$ go run main.goSunday 是一周的第 0 天Monday 是一周的第 1 天Tuesday 是一周的第 2 天Wednesday 是一周的第 3 天Thursday 是一周的第 4 天Friday 是一周的第 5 天Saturday 是一周的第 6 天
复制代码

无类型常量

Go 的常量有一些特别之处,上面我们定义的常量都是基本数据类型,如 ​​string​​​ 或 ​​float64​​,但许多常量并不从属于某一具体类型。编译器将这些从属类型待定的常量表示成某些值,这些值比基本类型的数字精度更高,且算数精度高于原生的机器精度。

从属待定的常量共有 6 种:

  • 无类型 布尔

  • 无类型 整数

  • 无类型 文字符号

  • 无类型 浮点数

  • 无类型 复数

  • 无类型字符串

const (        deadbeef = 0xdeadbeef        // 无类型整数,值为 3735928559        a        = uint32(deadbeef)  // uint32, 值为 3735928559        b        = float32(deadbeef) // float32, 值为 3735928576(向上取整)        c        = float64(deadbeef) // float64, 值为 3735928559        d        = int32(deadbeef)   //  编译错误:溢出,int32无法容纳常量值        e        = float64(1e309)    // 编译错误:溢出,float64,无法容纳常量值        f        = uint(-1)          // 编译错误:溢出,uint 无法容纳常量值)
// consts\main.go:31:19: constant 3735928559 overflows int32// consts\main.go:32:21: constant 1e+309 overflows float64// consts\main.go:33:18: constant -1 overflows uint
复制代码

借助于推迟确定从属类型,无类型常量不仅能维持更高的精度,与类型已确定的常量相比,它们还能写出更多表达式而无需转换类型。

代码注释

go 语言的代码注释和 c 语言一样,使用单行注释 // 和多行注释 /**/ 的格式,在代码中适当的增加注释方便自己和他人阅读,写注释其实也是写代码前的一个总体设计。

// 声明变量var a intvar str stringvar b, c float64
// 给变量赋值a = 20str = "Hello World!"b, c = 7.14, 9.14
/* 打印变量 */fmt.Println("value of a = ", a)fmt.Println("var of str = ", str)fmt.Println("var of b = ", b)fmt.Println("var of c = ", c)
复制代码

总结

又到了本篇文章的总结部分。

变量是可以改变的,变量有自己的类型和名字,可以使用 var 关键字声明一个变量,或者使用短文本的海象运算符 := 来定义一个变量,变量可以隐式转换,编译器会自动推断该变量的类型,变量命名最好使用有意义方便知道大家知道其功能的名字。


常量是一种创建命名标识符的方法,该标识符的值永远不会改变。它们还为语言提供了难以置信的灵活性。在 Go 中实现常量的方式非常独特。常量不同于变量,常量只存在于编译期,无类型常量可以隐式转换,而类型常量和变量不能,无类型常量视为具有种类,而不是类型。

下一篇我们将进入真实世界的逻辑控制,体会真正的编程乐趣!

发布于: 5 小时前阅读数: 14
Go 语言快速入门指南:第二篇 变量与常量

相关内容推荐

seo栏目优化seo培训的课程p2p seo东莞seo实战培训seo国际外包企业seo优化关键词智火seo智能seo优化精灵seo广告网seo搜索引擎优化5色站seoSEO入门微单seo快排教程seo加分项seo网站推广怎样SEO数据监控app做网站seo优化怎么做公司网站seo旺仔seoseo技术很难么北京搜索引擎seoseo网站推广软件seo建网站柴潇seo网络优化中seo济南seo快速排名网络收藏夹seo根seo新手如何学seo好往seo做seo需要什么如何用seo推广朗行seo广西SEO优化简历seo营销代理引擎优化chae min seo企业网站如何seo杭州SEO优化营商seo赚钱秘笈SeO4基团网站怎么做seo优化锚文本 seoSEO优化技术员seo中国官网seo网站怎么做淮安百度seo企业seo优化方案靠谱seo优化推广公司二级域名 seo苏州谷歌seo招聘你对seo学seo如何入门苏州网站seo优化公司新乡专业seo中山百度seo效果百度 seo优化seo培训课程佛山seo 培训 北京怎么学seo基础山西SEO优化营商广州seo网络优化公司聊城seo推广系统学习seoseo李俊超腾企网SEOseo产品词深圳seo优化费用seo ajax谢盼龙seo免费seo视频教程seo学习哪家好遇见seo小小独SEO木子seoseo关键词怎么做算法 seo工具SEO抄书排名seo优化外包seo培训seo8快速优化seo软件优质商家seo西装新浪微博seo优化seo网站优化外包公司seo搜索引擎优化指南网站seo优化价格搜狗seo优化软件seo的要素小雨seo上海哪家SEO好京东seo软件seo优化吗北京专业seo优化公司SEO文案伤感platinum seo packseo网址潮州seo排名url seo罗庄seoseo优化怎么做的成都百度seo推广长春SEO学校靠谱的seo公司seo工作经历seo产品词seo难学么在哪里学seo什么是seo搜索凡科建站seoseo严家成seo.pdf椰子SEOseo学seo是怎么优化的网页seo优化费用湖南SEO优化方案零基础可以学seo优化吗企业seo优化托管google seo优化seo常用表格深圳学习seo优化github seo英文名seo英文网站seo优化后端转seo没有基础能学seo吗seo实战培训课程千图网seoflash seo辰宇SEO工具箱seo培训时间隐藏文字 seo一个新网站怎么做seoseo上海公司seo检测报告网络seo培训seo小程序seo很难爱站seo下载开封seo优化50 seo为什么做seoSEO案例分析五官SEO目录生成seo 格式易语言seo淘宝seo优化软件深圳关键词seo优化公司seo与竞价推广的优劣百度调整seoSEO优化技术支持seo 前景seo免费优化网址seo排名优化外包公司辰旭seo婚恋seo高级seo工程师如何分析一个网站SEO深圳免费网站SEO冰浩seoseo外包日照seo外包服务网站优化网站seo代码优化专业的seo优化公司seo膜片枫林SEO工具简笔画seo整站优化外包服务17年seo优化技术软件seo-yeondiscuz论坛seo设置seo乐云seo 怎么赚钱seo工具排行广州企业seo数字域名seoseo3视频seo深度优化公司东莞seo优化网站商推seoseo标题怎么seo培训haiyaoseoseo救护济宁seo 整站短视频搜索seoseo项目规划哪里有学seo的seo出单seo火狐插件seo网页设计seo的方式seo与站王seo达排seo视频教程三人行seo 流程网站建设seo视频宿迁seo网站排名优化软件教程东莞 seo全网营销与seoseo简单吗seo实战密码第二版小莱seo

合作伙伴

璇泰初网络

www.07yue.com
www.kmpower.cn
www.28j.com.cn
www.youpinhui.vip
www.seo5951.com
www.tjwyj.com
www.zhdaili.cn
www.innatjerome.com
www.innatjerome.com
www.bjdongwei.cn
seo.xtcwl.com
www.akz.net.cn
www.he1tech.com
www.maijichuang.cn
www.3phw.com
www.conductive-powder.com
www.pifajia.net.cn
www.andmedia.cn
seo.urkeji.com
dh.jsfengchao.com