golang_var

变量的基本类型

  • Bool
  • Numeric Types
  • String

Bool

bool类型表示布尔值,为true或false。

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

import "fmt"

func main() {
    a := true
    b := false
    fmt.Println("a:", a, "b:", b)
    c := a && b
    fmt.Println("c:", c)
    d := a || b
    fmt.Println("d;", d)
}

Numeric

有符号整数

类型 大小 范围
int8 8位 -128到127
int16 16位 -32768到32767
int32 32位 -2147483648到2147483647
int64 64位 -9223372036854775808到9223372036854775807
int 表示32位或64位整数,具体取决于底层平台。除非需要使用特定大小的整数,否则通常应使用int来表示整数 32位系统中的-2147483648到2147483647和64位系统中的-9223372036854775808到9223372036854775807
1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
    var a int = 9
    b := 10
    fmt.Println("value of a is", a, "and b is", b)
}

可以使用 Printf 方法中的 %T 格式说明符打印变量的类型。Go 有一个不安全的包,它有一个 Sizeof 函数,它以字节为单位返回传递给它的变量的大小。应谨慎使用不安全的软件包,因为使用它的代码可能存在可移植性问题,以下代码中使用它只是举例说明。

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

import (
    "fmt"
    "unsafe"
)

func main() {
    var a int = 10
    b := 20
    fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) //type and size of a
    fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) //type and size of b
}

无符号整数

类型 大小 范围
int8 8位 -128到127
int16 16位 -32768到32767
int32 32位 -2147483648到2147483647
int64 64位 -9223372036854775808到9223372036854775807
int 表示32位或64位整数,具体取决于底层平台。除非需要使用特定大小的整数,否则通常应使用int来表示整数 32位系统中的-2147483648到2147483647和64位系统中的-9223372036854775808到9223372036854775807

浮点类型

float32: 32位浮点数 float64: 64位浮点数

复杂类型

complex64:具有float32实部和虚部的复数数字 complex128:具有float64实部和虚部的复数

内置函数复合体用于构造具有实部和虚部的复数。复杂函数具有以下定义

1
func complex(r, i FloatType) ComplexType  

它将实部和虚部作为参数并返回复杂类型。实部和虚部都应该是相同的类型。即float32或float64。如果实部和虚部都是float32,则此函数返回complex64类型的复数值。如果实部和虚部都是float64类型,则此函数返回complex128类型的复数值

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

import (
    "fmt"
)

func main() {
    a := complex(1, 2)
    b := 3 + 4i
    sum := a + b
    fmt.Println("sum:", sum)
}

其他数字类型

byte 是 unit8 的别名 符文是 int32 的别名

字符串类型

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

import (
    "fmt"
)

func main() {
    name := "reallyli"
    ago := 26
    fmt.Println("My name is ", name, ", ago is", ago)
}

类型转换

Go 对显式输入非常严格。没有自动类型转换,两个不同类型的变量进行运算需要进行强制转换

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

import (
    "fmt"
)

func main() {
    a := 1.22
    b := 2
    sum := a + b
    // sum := int(a) + b //yes
    fmt.Println("sum:", sum)
}

invalid operation: a + b (mismatched types float64 and int)

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

import (  
    "fmt"
)

func main() {  
    i := 10
    var j int = float64(i) //this statement will not work without explicit conversion
    // var j float64 = float64(i) // yes
    fmt.Println("j", j)
}