上一篇博客对go程序对整体结构进行了简要介绍,记忆对fmt包进行了简要介绍,今天跟大家分享的是go语言中的变量,variable。
go语言使用var关键字来定义变量,但是和c++不同的是,类型放在变量的后面,格式如下:
var variable_list optional_data_type;下面就简单定义几个变量:
var i, j, k intvar c, ch bytevar f, salary float32d = 42var a, s = 100, "abc" //混合变量声明这里我们需要明确一下,为什么go会把变量的类型写在后面呢? 在c++中您是否记得这样的问题呢:
int *p, q上面p为指针,q为int类型,给我们造成了很大的困扰。
另外可以已组的形式进行变量定义:
var( x, y int a, s = 100, "abc")上面需要注意的是使用圆括号而不是花括号。
对于普通的变量,go语言也会给我们进行零初始化,避免了在c++中变量为垃圾值。
同样,可以省略变量类型,由编译器推断。
示例代码:
package mainimport "fmt"func main() { var a = 1 //自动推断a为int var b int //b初始化为0 fmt.PRintln(a,b)}有时候,我们可以省略var关键字,使用更加简洁的语法进行变量的定义和初始化:
package mainimport "fmt"func main() { a := 1 b, s := 2, "go" fmt.Println(a, b, s)}这里有个容易被忽略的大坑,就是这种简短模式只能用在函数的内部 看下面的代码:
package mainimport "fmt"var x = 1func main() { fmt.Println(&x, x) x := 2 //重新定义了局部变量 fmt.Println(&x, x)}输出: 0x160004 1 0x1040a140 2
当你写下下面的代码时候,就会报错,no new variables on left side of :=
y := 1 fmt.Println(&y, y) y := 2 fmt.Println(&y, y)注意,这里说的是局部变量,而不是全局变量:
package mainimport "fmt"var x = 1func main() { var a, s = 1, "abc" fmt.Println(a)}错误: s declared and not used
最后就是介绍一下go中的变量类型:
boolstringint int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptrbyte // alias for uint8rune // alias for int32 // represents a Unicode code pointfloat32 float64complex64 complex128注意,没有double,但是有float64
这里就是简单提一下,之后还会进行更详细的关于类型,以及类型之间转换的介绍。
新闻热点
疑难解答