一、变量:
package main
import "fmt"
// *********全局变量是允许声明但不使用的。 同一类型的多个变量可以声明在同一行************
// 这种因式分解关键字的写法一般用于声明全局变量
// var (
// vname1 v_type1
// vname2 v_type2
// )
func main(){
// *******如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误*******
// 声明变量的一般形式是使用 var 关键字:
// var identifier type
// 可以一次声明多个变量:
// var identifier1, identifier2 type
// 声明一个变量并初始化
var a string = "Hello Golang"
fmt.Println(a)
// 一次声明多个变量
var b, c int = 1, 2
fmt.Println(b, c)
// 变量声明
// 第一种,指定变量类型,如果没有初始化,则变量默认为零值。
// 没有初始化就为零值
var d int
fmt.Println(d)
// bool 零值为 false
var e bool
fmt.Println(e)
var i int
var f float64
var g bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, g, s)
// 0 0 false ""
// 第二种,根据值自行判定变量类型。
// var v_name = value
var v_name = true
fmt.Println(v_name)
// 第三种,如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误,格式:
// v_name := value
// intVal := 1 相等于:var intVal int; intVal =1
// 初始化声明:这是使用变量的首选形式,但这种不带声明格式的只能在函数体中出现
intVal := 1
fmt.Println(intVal)
run := "goAhead"
fmt.Println(run)
// 多变量声明
// 类型相同多个变量, 非全局变量
// var vname1, vname2, vname3 type
// vname1, vname2, vname3 = v1, v2, v3
// // 和 python 很像,不需要显示声明类型,自动推断
// var vname1, vname2, vname3 = v1, v2, v3
// 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
// vname1, vname2, vname3 := v1, v2, v3
}
二、运算符:
Golang中没有“===”运算符
Golang中“++”(自增)和“--”(自减)只能在变量后面
三、条件语句:
Golang中if条件语句:如果已经走了一个分支,那么下面的分支就不会再去判断执行了
var score int = 95
if score >= 90 {
fmt.Println("您的成绩为A级")
} else if score >= 80 {
fmt.Println("您的成绩为B级")
} else if score >= 70 {
fmt.Println("您的成绩为C级")
} else if score >= 60 {
fmt.Println("您的成绩为D级")
} else {
fmt.Println("您的成绩为E级")
}
// 输出:您的成绩为A级
Golang中“”switch”条件语句中没有“break”关键字:
var score int = 25
switch score / 10 {
case 10:
fmt.Println("您的成绩为A级")
case 9:
fmt.Println("您的成绩为B级")
case 8:
fmt.Println("您的成绩为C级")
case 7:
fmt.Println("您的成绩为D级")
case 6:
fmt.Println("您的成绩为E级")
default:
fmt.Println("您的成绩为G级")
}
// default 分支可以放在任意位置,不一定要放在最后
// 输出:您的成绩为G级
四、循环语句:
Golang中只有“for循环”,没有“while循环”:
// range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素
var str string = "hi,Golang你好"
for i, value: = range str {
fmt.Printf("索引为%d,具体的值为%c", i, value)
fmt.Println()
}
// 索引为0,具体的值为h
// 索引为1,具体的值为i
// 索引为2,具体的值为,
// 索引为3,具体的值为G
// 索引为4,具体的值为o
// 索引为5,具体的值为l
// 索引为6,具体的值为a
// 索引为7,具体的值为n
// 索引为8,具体的值为g
// 索引为9,具体的值为你******
// 索引为12,具体的值为好******
五、函数:
Golang中函数可以返回多个值:
package main
import "fmt"
func getResult(a int, b string, c bool) (int, string, bool) {
return a, b, c
}
func main() {
x, y, z := getResult(1, "hi", true)
fmt.Println(x, y, z)
}
六、类型转换:
go 不支持隐式转换类型
package main
import "fmt"
func main() {
var a int64 = 3
var b int32
b = a
fmt.Printf("b 为 : %d", b)
}
此时会报错
cannot use a (type int64) as type int32 in assignment
cannot use b (type int32) as type string in argument to fmt.Printf
但是如果改成 b = int32(a) 就不会报错了:
package main
import "fmt"
func main() {
var a int64 = 3
var b int32
b = int32(a)
fmt.Printf("b 为 : %d", b)
}