Go笔记Day1 | 青训营

93 阅读3分钟

Go语言基础语法| 青训营

"Hello World"

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world")
}

变量

示例:

package main

import (
    "fmt"
    "math"
)

func main() {

    var a = "initial"

    var b, c int = 1, 2

    var d = true

    var e float64 

    f := float32(e)

    g := a + "foo"

    fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
    fmt.Println(g)                   // initialapple

    const s string = "constant"
    const h = 500000000
    const i = 3e20 / h
    fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

详细来说: Go语言里变量的声明为:

第一种:

var 变量名字 类型 = 表达式

其中“类型”和“表达式”可以省略其中一个 当省略“类型”时,表示根据初始化表达式来推导变量信息

var a = "initial" //a自动推导为字符串型

当省略“表达式”时,表示用零值去初始化该变量。 数值类型对应零值就是零 布尔类对应零值是false 字符串类型对应零值是空字符串 接口或引用类型变量对应的零值是nil

第二种:

简短变量声明

变量名:=等于值

也可以在=号后加上类型,进行强制类型转换 值得注意的是 ":="为声明语句,而"="是一个变量复制语句 例:

i, j = j, i //交换i和j的值

常量

常量的申明是把var改为const,在go语言里的常量,它没有确定的类型,而是根据使用的上下文来自动确定类型。

数据类型

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。包括基本类型(如整型、浮点型、布尔型、字符型)和复合类型(如数组、切片、映射、结构体、接口)下面是一些常用的数据类型及其取值范围:

序号类型和描述
1uint8
无符号 8 位整型 (0 到 255)
2uint16
无符号 16 位整型 (0 到 65535)
3uint32
无符号 32 位整型 (0 到 4294967295)
4uint64
无符号 64 位整型 (0 到 18446744073709551615)
5int8
有符号 8 位整型 (-128 到 127)
6int16
有符号 16 位整型 (-32768 到 32767)
7int32
有符号 32 位整型 (-2147483648 到 2147483647)
8int64
有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮点型 表格:

序号类型和描述
1float32
IEEE-754 32位浮点型数
2float64
IEEE-754 64位浮点型数
3complex64
32 位实数和虚数
4complex128
64 位实数和虚数

其他数字类型 以下是一些其他类型:

序号类型和描述
1byte
类似 uint8
2rune
类似 int32
3uint
32 或 64 位
4int
与uint一样大小
5uintptr
无符号整型,用于存放一个指针

复合类型 以下是一些示例:

var a [5]int = [3]int{1, 2, 345}
var b []int = []int{1, 2, 3}
var c map[string]int = map[string]int{"a": 1, "b": 2}
var d struct{ x, y int } = struct{ x, y int }{1, 2}
var e interface{} = 1.23

Go的运算符

Go的运算符在使用时基本和c语言类似。 运算符的优先级:

优先级运算符
5* / % << >> & &^
4+ - | ^
3== != < <= > >=
2&&
1||

Go的条件语句、循环语句、跳转语句

例子:

    a:=5
    if a > 0{
        fmt.Println("a是正数")
    }else if a == 0{
        fmt.Println("a是零")
    }else{
        fmt.Println("a是负数")
    }

    for i := 0; i < a; i++ {
        fmt.Println(i)
    }

    switch a {
    case 1:
        fmt.Println(1)
        case 2:
        fmt.Println(2)
    default:
        fmt.Println(a)
    }

值得注意的是,类比C语言Go语言中的iffor语句可以省略括号