小白从零学习Go语言第一天
小白从零学习Go语言第二天
- 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。
- 变量可以通过变量名访问。
- 之前提到过,Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
var
关键字:var identifier type
var a string = "变量"
var identifier1, identifier2 type
var b, c int = 1, 2
var b int
fmt.Println(b)
//0
var c bool
fmt.Println(c)
//false
var v_name = value
var vname1, vname2, vname3 = v1, v2, v3
var d = 1
var e = true
v_name := value
vname1, vname2, vname3 := v1, v2, v3
这样定义省略了 var,也省略了变量类型, 不过要注意 := 左侧如果没有声明新的变量,会产生编译错误
intVal := 1
等价于
var intVal int
intVal =1
var (
vname1 v_type1
vname2 v_type2
)
var a, b int
var c string
a, b, c = 5, 7, "abc"
或者
a, b, c := 5, 7, "abc"
并行赋值可以被用于一个函数返回多个返回值时,比如这里的
val
和错误err
是通过调用Func1
函数同时得到:val, err = Func1(var1)
。
a, b = b, a
,但是两个变量的类型必须是相同。a declared and not used
空白标识符 _
来抛弃值( _ 是一个只写变量,你不能得到它的值。),如:_, b = 5, 7 中将 5 抛弃。
常量是一个简单值的标识符,在程序运行时不会被修改。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
常量的定义格式(显式类型定义):
const identifier [type] = value
const c_name1, c_name2 = value1, value2
const Pi = 3.1415926
[type]
(即隐式类型定义),因为编译器可以根据变量的值来推断其类型。const (
Unknown = 0
Female = 1
Male = 2
)
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
//abc 3 16
}
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const
关键字出现时将被重置为 0( const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次( iota 可理解为 const 语句块中的行索引)。
const (
a = iota // 0
b = iota // 1
c = iota // 2
)
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1
所以 a=0, b=1, c=2 可以简写为如下形式(定义常量组时,如果不提供初始值,则表示将使用上行的表达式。):
const (
a = iota
b
c
)
package main
const (
i = iota
j = iota
x = iota
)
const y = iota
const z = iota
func main(){
println(i, j, x, y, z)
// 输出是 0 1 2 0 0
}
实例1:
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota = 3
e //"ha" iota = 4
f = 100 //iota = 5
g //100 iota = 6
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
//0 1 2 ha ha 100 100 7 8
}
实例2:
package main
import "fmt"
const (
i=1<<iota
j=3<<iota
k
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
//i= 1
//j= 6
//k= 12
//l= 24
}
iota 表示从 0 开始自动加 1,所以 i = 1<<0
= 1, j = 3<<1
= 6。
左移运算符 <<
是双目运算符。左移 n 位就是乘以 2 的 n 次方。 该操作将 << 左边的运算数的各二进位全部左移若干位,由 << 右边的数指定移动的位数,高位丢弃,低位补 0。右移运算符 >>
是双目运算符。右移 n 位就是除以 2 的 n 次方。 其功能是把 >> 左边的运算数的各二进位全部右移若干位, >> 右边的数指定移动的位数。而根据定义常量组时,如果不提供初始值,则表示将使用上行的表达式
, k = 3<<2
= 12,l = 3<<3
= 24。