欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

golang知识精要(二)

程序员文章站 2022-04-21 16:39:38
类型 go是 静态类型 语言,不能在运行期改变变量类型。 变量定义 使用var定义变量,自动初始化为零值; 如果提供初始值,可省略变量类型; 函数内部可使用 := 定义变量。 多变量 可一次定义多个变量; 多变量赋值时, 先计算所有相关值,然后再从左到有依次赋值 。 const 常量值必须是编译期可 ......

类型

go是**静态类型**语言,不能在运行期改变变量类型。

变量定义

  • 使用var定义变量,自动初始化为零值;
  • 如果提供初始值,可省略变量类型;
  • 函数内部可使用:=定义变量。
var x int // 自动初始化为0
var f float32 = 1.6
var s = "abc"

func main(){
    x := 123
}

多变量

  • 可一次定义多个变量;
  • 多变量赋值时,先计算所有相关值,然后再从左到有依次赋值
var x, y, z int
var s, n = "abc", 123

data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100  //(i=0) -> (i=2), (data[0]=100)

const

  • 常量值必须是编译期可确定的数字、字符串、布尔值
const (
    s = "abc"
    x   // x = "abc" 常量组中,如不提供类型和初始值,那么与上一常量相同

    b = len(a)
    c = unsafe.sizeof(b)  // 可以使用len, cap, unsafe.sizeof等编译器可确定结果的函数返回值
)

枚举

const (
    sunday = iota // 0
    monday  // 1
    ..
)

const (
    _ = iota // iota =0
    kb int64 = 1 << (10 * iota) // iota = 1
    mb                                     // 与kb表达式相同,但iota = 2
    gb
)

变量默认值

类型 默认值 长度
bool false 1
byte 0 1
rune 0 4
int/uint 0 -
float* 0.0 -
string "" -
slice / map / channel nil -
interface/function nil -
array / stuct - -

类型转换

  • 不支持隐式转换
var b byte = 100
var n int = (int)(b) // 显示转换,建议(type)

a := 100
if a {  // 不能使用其他类型当bool使用
    println("true")
}

指针

与c类似,略。

数组

var a [4]int = [4]int{1,2} //未初始化的元素将被赋为零值
var b = [...]string{"hello"} //长度为1
c := [...]int{99:-1} //定义了100个元素,最后一个初始化为-1    

说明

  • 如果数组的元素类型是可以互相比较的,那么数组类型也可以互相比较
  • 当两个数组的所有元素相等,那么数组相等

表达式

range

[注意事项](https://studygolang.com/articles/12958)

switch

  • 可省略break,默认自动终止。
x := []int{1, 2, 3}
i := 2

switch i {
case x[1]:
    println("a") // 自动终止
case ..
}

switch { // 可省略条件
case x > 0 :
    ...
}

switch i := 2; { // 带初始化语句
...
}