变量
// 定义多个变量var i, j, k bool// 定义同时初始化var x, y int = 1, 2//类型自动推导var a, b = 10, "golang"k := 3
常量
//常量用 const 定义, 不能用 :=//常量的值需要在编译时确定, 类似 C 语言中的 #defineconst Hello = "你好"const World = "世界"
基本类型
package mainimport ( "fmt" "math/cmplx")var ( ToBe bool = false MaxInt uint64 = (1<<64 - 1) z complex128 = cmplx.Sqrt(-5+12i))func main() { const f = "%T(%v)\n" fmt.Printf(f, ToBe, ToBe) fmt.Printf(f, MaxInt, MaxInt) fmt.Printf(f, z, z)}
输出:
C:\Go\bin\go.exe run C:\Go\src\flag\s1.gobool(false)uint64(18446744073709551615)complex128((2+3i))
基本数据类型:
boolstringint : int8 int16 int32 int64uint : uint8 uint16 uint32 uintptrbyte // alias for uint8rune // alias for int32 // represents a Unicode code pointfloat32 float64complex64 complex128
零值
对于 定义但未初始化的变量,被赋予 “零值”Zero Value零值的定义: 对数值类型, 就是 0 bool 类型,是 false字符串类型, 空字符串 ""
类型转换
类型转换表达式 T(v)i := 42f := float64(i)u := uint(f)在 GO 语言, 类型需要显示的进行转换"explicit is better than implicit"
测试:
package mainimport ( "fmt")func main() { const f = "%T(%v)\n" i := 42 fi := float64(i) uf := uint(fi) fmt.Printf(f, i, i) fmt.Printf(f, fi, fi) fmt.Printf(f, uf, uf)}
输出:
C:\Go\bin\go.exe run C:\Go\src\flag\s1.goint(42)float64(42)uint(42)