GO 基础语法
1. 编译运行:
直接运行 main 文件
go run main.go
build 编译成二进制文件
go build main.go
2. 变量:
//使用 var 声明变量
//变量会根据赋值,自我类型推导
var a = "123"
var a int = 1
var e
//使用 := 声明短变量
a := float(1.0)
//常量
const a = "const"
3. if … else
//if else 大括号必须和 if 或 else 在同一行
//if 条件不需要写小括号()
if a == true {
fmt.PrintLn("123");
}else if {
}else{
}
4. for循环
go语言循环语句只有 for,没有 while 和 do{}while;
for i = 1; i < 7; i++{
//continue or break
}
5. switch
//go 中条件 变量可以是任意类型int float, string
//在 c++ 中,每个 case 如果不写 break, 会继续跳到下一个 case 执行, 而 go 中不需要写 break,即会跳出。
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
//switch 甚至可以取代 if语句
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
6. make 函数:
6.1 切片 Slice:
语法 : make(type, length, capacity); capacity 可选
//下面语句得到一个长度为 3的切片
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
//注意,使用 append 必须要再赋值给 s, 因为 append 可能会触发扩容操作,会得到一个新的切片指针,与c++中 vector 增删类似;
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
}
7. map
go 中的map 类似于 c++ 中的 无序 map – unordered_map
//声明格式: map[key_type]value_type
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
fmt.Println(m["unknow"]) // 0
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false
delete(m, "one")
//直接使用 {} 初始化
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
8. 函数
package main
import "fmt"
//支持返回多值
func add(a int, b int) int {
return a + b
}
func add2(a, b int) int {
return a + b
}
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
9.结构体
type user struct{
name string
password string
}
//结构体方法 可以直接用 .method()方法
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}
func main() {
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048")) // true
}