变量指向一个内存地址,其中存储了某种类型的值。在静态语言中,此内存存储的变量类型不可变。
- Go 中的变量如何声明?
- Go 变量声明可以指定哪些类型?
- Go 中如何实现类型的转换和断言?
1. Go 中的变量如何声明
使用 var 关键词声明变量,有以下几种可变形式:
- 简单的类型声明:var a int
- 声明并赋初值:var a int = 1 或 var a = 1
- 同时声明多个变量: var a, b = 1, 2
当声明初始值时,可以不用指定类型,Go 会根据赋值判断并自动定义变量的类型。
以下为变量声明的示例:
package main
import "fmt"
func main() {
var a int
var b int = 2
var c = 3
var d, e = 4, 5
fmt.Printf("a: %d, b: %d, c: %d, d: %d, e: %d", a, b, c, d, e)
}
Go 还提供了省略 var 关键词的声明方式,需要注意的是,已经声明的变量不能再次使用 :=
,除非左边有新的变量:
package main
import "fmt"
func main() {
a := 1
fmt.Println(a)
a, b := 2, 3
fmt.Printf("a: %d, b: %d", a, b)
}
2. Go 变量声明可以指定哪些类型
- bool, string
- byte, rune
- float32, float64, complex64, complex128
- (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
byte 是 uint8 的别名,rune 是 int32 的别名。 byte代表的是字节,rune 代表的是字符。在 utf8 编码中,1个中文字符占用 3个字节。
complex64的实部和虚部都是float64类型,complex128同理。
3. Go 中如何实现类型的转换
- int -> int64
- string -> int
- int -> string
更多转换查看 strconv包。
注意:int 转换为 int64 在32位机器上存在精度问题。
package main
import (
"fmt"
"strconv"
)
func main() {
// int 到 int64
a := 1
b := int64(a)
fmt.Printf("a: %d, b: %d", a, b)
// string 到 int
c := "123"
d, _ := strconv.Atoi(c)
fmt.Printf("c: %s, d %d", c, d)
// int 到 string
e := 234
f := strconv.Itoa(e)
fmt.Printf("e: %d, f %s", e, f)
// float32 到 string
g := 3.14
h := strconv.FormatFloat(g, 'E', -1, 32)
fmt.Printf("g: %f, h: %s", g, h)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。