go基础——01(变量、常量、内置基本类型)

shaozhang872196 · · 1347 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1、变量
Go语言里面定义变量有多种方式。
var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面
//定义一个名称为“variableName”,类型为"type"的变量
var variableName type
定义多个变量
//定义三个类型都是“type”的三个变量
var vname1, vname2, vname3 type
定义变量并初始化值
//初始化“variableName”的变量为“value”值,类型是“type”
var variableName type = value
同时初始化多个变量
/* 定义三个类型都是"type"的三个变量,并且它们分别初始化相应的值
* vname1为v1,vname2为v2,vname3为v3
*/
var vname1, vname2, vname3 type= v1, v2, v3
你是不是觉得上面这样的定义有点繁琐?没关系,因为Go语言的设计者也发现了,有一种写法可以让它变得简
单一点。我们可以直接忽略类型声明,那么上面的代码变成这样了:
/* 定义三个变量,它们分别初始化相应的值
vname1为v1,vname2为v2,vname3为v3 然后Go会根据其相应值的类型来帮你初始化它们
*/
var vname1, vname2, vname3 = v1, v2, v3
你觉得上面的还是有些繁琐?好吧,我也觉得。让我们继续简化:
/* 定义三个变量,它们分别初始化相应的值
vname1为v1,vname2为v2,vname3为v3 编译器会根据初始化的值自动推导出相应的类型
*/
vname1, vname2, vname3 := v1, v2, v3




现在是不是看上去非常简洁了?:=这个符号直接取代了var和type,这种形式叫做简短声明不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用var方式来定义全局变量

2、常量
所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go程序中,常量可定
义为数值、布尔值或字符串等类型。
它的语法如下:
const constantName = value
//如果需要,也可以明确指定常量的类型:
const Pi float32 = 3.1415926
//下面是一些常量声明的例子:
const Pi = 3.1415926
const i = 10000
const MaxThread = 10
const prefix = "astaxie_"

3、内置基础类型
在Go中,布尔值的类型为bool,值是true或false,默认为false。
//示例代码
var isActive bool // 全局变量声明
var enabled, disabled = true, false // 忽略类型的声明
func test() {
var available bool // 一般声明
valid := false // 简短声明
available = true // 赋值操作
}
3.1、数值类型
整数类型
有无符号和带符号两种。Go同时支持int和uint,这两种类型的长度相同,但具体长度取决于不同编
译器的实现。当前的gcc和gccgo编译器在32位和64位平台上都使用32位来表示int和uint,但未来在64位平台
上可能增加到64位。Go里面也有直接定义好位数的类型:rune, int8, int16, int32, int64和byte, uint8,
uint16, uint32, uint64其中rune是int32的别称,byte是uint8的别称。
需要注意的一点是,这些类型的变量之间不允许互相赋值或操作,不然会在编译时引起编译器报
错。
浮点数的类型
有float32和float64两种(没有float类型),默认是float64。

3.2、字符串
我们在上一节中讲过,Go中的字符串都是采用UTF-8字符集编码。字符串是用一对双引号("")或反引号(`
`)括起来定义,它的类型是string。注意单引号" ' "与反引号" ` "的区别
//示例代码
var frenchHello string // 声明变量为字符串的一般方法
var emptyString string = "" // 声明了一个字符串变量,初始化为空字符串
func test() {
no, yes, maybe := "no", "yes", "maybe" // 简短声明,同时声明多个变量
japaneseHello := "Ohaiou" // 同上
frenchHello = "Bonjour" // 常规赋值
}
在Go中字符串是不可变的,例如下面的代码编译时会报错:
var s string = "hello"
s[0] = 'c'
但如果真的想要修改怎么办呢?下面的代码可以实现:
s := "hello"
c := []byte(s) // 将字符串 s 转换为 []byte 类型
c[0] = 'c'
s2 := string(c) // 再转换回 string 类型
fmt.Printf("%s\n", s2)
Go中可以使用+操作符来连接两个字符串:
s := "hello,"
m := " world"
a := s + m
fmt.Printf("%s\n", a)
修改字符串也可写为:
s := "hello"
s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作
fmt.Printf("%s\n", s)
如果要声明一个多行的字符串怎么办?可以通过`来声明:
m := `hello
world`
` 括起的字符串为Raw字符串,即字符串在代码中的形式就是打印时的形式,它没有字符转义,换行也将原样输出。

3.3、iota枚举
Go里面有一个关键字iota,这个关键字用来声明enum的时候采用,它默认开始值是0,每调用一次加1
<span style="font-family: 微软雅黑; "></span><pre name="code" class="html" style="font-size: 14px; line-height: 21px; ">const( //采用分组的方式进行const声明
x = iota // x == 0
y = iota // y == 1
z = iota // z == 2
w // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota"
)
<span style="font-family: 微软雅黑; ">const v = iota // </span><span style="font-family: 微软雅黑; background-color: inherit; color: rgb(230, 0, 19); ">每遇到一个const关键字,iota就会重置,此时v == 0</span>

除非被显式设置为其它值或iota,每个const分组的第一个常量被默认设置为它的0值,第二及后续的常量被默认设置为它前面那个常量的值,如果前面那个常量的值是iota,则它也被设置为iota。

说明:以上内容为学习go语言的总结笔记

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:shaozhang872196

查看原文:go基础——01(变量、常量、内置基本类型)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1347 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传