变量定义
package main
import (
"fmt"
)
var test11 = 45 // 在main函数外部定义变量必须要用 var
var (
aa = "多个也可以这样赋值"
bb = 34
cc = 232
)
func main() {
//字符类型
var tt = 'c'
fmt.Printf("%c\n", tt)
var test0 = 92
var test1, test2, te = 34, 21, "可以不写类型, 且连续赋值"
test3, test4 := "可以不用var声明, 使用 := 代替", 89
fmt.Println("测试中文名", test11, test0,
test1, test2, te, test3, test4, aa, bb, cc, tt)
}
常量定义
package main
func enum(){
// 枚举类型
const (
cpp = 0
java = 1
python = 2
golang = 3
)
}
func main() {
const aaa = "定义字符串"
const a, b, c = 1, 2, 3
}
iota 自增关键字
package main
import "fmt"
func main() {
const (
cpp = iota + 2 // 自增 0 + 2
java // 1 + 2
python // 2 + 2
golang // 3 + 2
_ // pass
rust // 5 + 2
)
// 可以使用_跳过
fmt.Println(cpp, java, python, golang, rust)
}
条件语句
package main
import "fmt"
func _switch(a, b int, op string) int{
// 没有 break
var result int
switch op {
case "+":
result = a + b
case "-":
result = a - b
default:
panic("unsupported op")
}
return result
}
func main() {
if b := _switch(3, 4, "+"); b == 7{
fmt.Println("表达式中可以同时包含同时包含变量定义、赋值和判断")
}
}
循环语句
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 通用方式
for i := 0; i < 100; i++{
fmt.Println(i)
}
// 省略初始条件
j := 3
for ; j <= 5; j++{
fmt.Println(j)
}
// 死循环,等效于其他语言的 while True
a := 3
for {
a ++
fmt.Println(a)
if a > 100{
break
}
}
//
file, err := os.Open("1_基础语法/bnode_1_基础语法")
print(err)
scanner := bufio.NewScanner(file)
for scanner.Scan(){ // 相当于迭代器
fmt.Println(scanner.Text()) // 使用 scanner.Text() 获取
}
}
函数
package main
import (
"fmt"
"reflect"
"runtime"
)
// 基本定义
func test1(a int, b int) (int, int) {
return a + 1, b + 1
}
// 可给返回值起名字,分别叫q、c
func test2(a int, b int) (q, c int) {
return a + 1, b + 1
}
// 可设置函数参数
func apply(op func(int, int) (int, int), a int, b int) (int, int) {
// 使用 反射 获取函数名
opPoint := reflect.ValueOf(op).Pointer()
funcName := runtime.FuncForPC(opPoint).Name()
fmt.Printf("调用函数: %s, 参数:a: %d, b %d", funcName, a, b)
return op(a, b)
}
// 可变参数
func test12(nums ...int) int {
for _, num := range nums{
print(num)
}
return 45
}
func main() {
q, r := test1(1, 3)
println(q, r)
// 如果只想用一个,可以使用 _
q2, _ := test1(1, 3)
println(q2)
// 可传递函数指针作为参数
q1, r1 := apply(test1, 4, 5)
println(q1, r1)
// 匿名函数可以直接定义在参数列表中, 匿名函数定义不用写 函数名
println(apply(
func(a, b int) (int, int) {
return a + 2, b + 45
}, 4, 5))
// 可变参数列表
test12(1, 2, 3, 4, 5)
}
指针
package main
func main() {
// 赋值
var a = 2
var p *int = &a
*p = 3
print(*p)
}