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语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。包括基本类型(如整型、浮点型、布尔型、字符型)和复合类型(如数组、切片、映射、结构体、接口)下面是一些常用的数据类型及其取值范围:
| 序号 | 类型和描述 |
|---|---|
| 1 | uint8 无符号 8 位整型 (0 到 255) |
| 2 | uint16 无符号 16 位整型 (0 到 65535) |
| 3 | uint32 无符号 32 位整型 (0 到 4294967295) |
| 4 | uint64 无符号 64 位整型 (0 到 18446744073709551615) |
| 5 | int8 有符号 8 位整型 (-128 到 127) |
| 6 | int16 有符号 16 位整型 (-32768 到 32767) |
| 7 | int32 有符号 32 位整型 (-2147483648 到 2147483647) |
| 8 | int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型 表格:
| 序号 | 类型和描述 |
|---|---|
| 1 | float32 IEEE-754 32位浮点型数 |
| 2 | float64 IEEE-754 64位浮点型数 |
| 3 | complex64 32 位实数和虚数 |
| 4 | complex128 64 位实数和虚数 |
其他数字类型 以下是一些其他类型:
| 序号 | 类型和描述 |
|---|---|
| 1 | byte 类似 uint8 |
| 2 | rune 类似 int32 |
| 3 | uint 32 或 64 位 |
| 4 | int 与uint一样大小 |
| 5 | uintptr 无符号整型,用于存放一个指针 |
复合类型 以下是一些示例:
var a [5]int = [3]int{1, 2, 3,4,5}
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语言中的if和for语句可以省略括号