Home GoLand 变量与常量
Post
Cancel

GoLand 变量与常量

变量

声明变量一般使用 var 关键字

单变量

  • 定义类型

不指定初始值的声明,默认为 0

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
	var a int
	fmt.Println("a =", a)
}

指定初始值,a 为 100

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
	var a int = 100
	fmt.Println("a =", a)
}
  • 省略类型

在声明时不知道类型的话,Go 会自动判断变量类型

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
	"fmt"
	"reflect"
)

func main() {
	var a = 100
	fmt.Println("a =", a)
	fmt.Printf("Type of a = %s", reflect.TypeOf(a))
}
  • :=

基于省略类型会自动判断,可以使用 := 直接声明变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
	"fmt"
	"reflect"
)

func main() {
	p := 3.14
	fmt.Println("p =", p)
	fmt.Printf("Type of p is %s", reflect.TypeOf(p))
}

/*
 * 输出
 * p = 3.14
 * Type of p is float64
 */

多变量

  • 相同类型
1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
	var a, b int
	fmt.Println("a =", a)
	fmt.Println("b =", b)
}
  • 相同类型赋值
1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
	var a, b int = 100, 200
	fmt.Println("a =", a)
	fmt.Println("b =", b)
}
  • 不同类型 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import (
	"fmt"
	"reflect"
)

func main() {
	var a, b = 100, 3.14
	fmt.Println("a =", a)
	fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
	fmt.Println("b =", b)
	fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

/*
 * 输出
 * a = 100
 * Type of a is int
 * b = 3.14
 * Type of b is float64
 */
  • 不同类型 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
	"fmt"
	"reflect"
)

func main() {
	a, b := 100, "Hello"
	fmt.Println("a =", a)
	fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
	fmt.Println("b =", b)
	fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

字符串类型在 go 里是个结构,包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节

可以使用 unsafe.Sizeof() 函数查看类型占用

全局变量

全局变量的声明不能使用 :=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
	"fmt"
	"reflect"
)

var a, b int

func main() {
	fmt.Println("a =", a)
	fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
	fmt.Println("b =", b)
	fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

或者使用分解的写法,这种写法一般用于全局变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
	"fmt"
	"reflect"
)

var (
	a int    = 1
	b string = "Go"
)

func main() {
	fmt.Println("a =", a)
	fmt.Printf("Type of a is %s\n", reflect.TypeOf(a))
	fmt.Println("b =", b)
	fmt.Printf("Type of b is %s", reflect.TypeOf(b))
}

常量

常量一般用 const 关键字定义

定义

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
	const c int = 9
	fmt.Println("c = ", c)
}

也可以省略类型

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
	const c = 9
	fmt.Println("c = ", c)
}

枚举

常量定义可以用于枚举

1
2
3
4
5
6
7
8
9
package main

func main() {
	const (
		BEIJING = 0
		SHANGHAI = 1
		SHENZHEN = 2
	)
}

iota 自增长

上述枚举以 0 开始递增,可以使用 iota 代替

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func main() {
	const (
		BEIJING = iota	// 0
		SHANGHAI		// 1
		SHENZHEN		// 2
	)

	fmt.Println(BEIJING, SHANGHAI, SHENZHEN)
}

iota 可以用于表达式,但一般用于自增

This post is licensed under CC BY 4.0 by the author.

Hello GoLand

GoLand 函数