方向三:Go 语言入门指南:基础语法和常用特性解析
1.开发环境vscode
step1:安装go的环境。
step2: 验证环境安装是否成功。
在命令行输入
go version
安装成功会显示。
step3: 安装vscode 和go插件。
step4: 输入程序运行。
运行命令:
go run main.go
运行结果:
2.基础语法
1.hello-world
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
2.变量
var a = "initial" //变量a被声明为string类型并初始化为 "initial"。 var b, c int = 1, 2 //变量b和c被声明为int类型,并分别初始化为 1 和 2。 var d = true //变量d被声明为 bool 类型并初始化为 true。 var e float64 //变量e被声明为 float64 类型,但没有显式初始化,它的默认值为 0。 f := float32(e) //变量a的值是 "initial",而 "foo" 是一个字符串。这里通过字符串拼接操作,g 的值会是 "initialfoo". g := a + "foo" //变量a的值是 "initial",字符串拼接操作,g的值会是"initialfoo"。
3.if-else
if-else和c++不同的地方是没有括号,后面也没有分号。
4.循环
循环和c++不同的地方是没有括号,后面也没有分号。
5.switch
switch和c++类似;
func main() {
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")
}
}
6.数组
一维数组
var a [5]int
a[4] = 100
二维数组
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
7.切片
1.创建切片, 使用 make s := make([]string, 3),或字面量创建切片。
2.修改切片, 直接修改切片的元素。
3.扩展切片:使用 append ,s = append(s, "d"),来添加元素,切片会自动扩展。
4.复制切片:使用 copy 函数, copy(c, s),将一个切片的内容复制到另一个切片。
5.切片操作:通过 s[start:end] 来截取切片的一部分。
8.map
map和c++类似。
9.range
func main() {
nums := []int{2, 3, 4}//定义并初始化一个整数切片 nums,其元素为 2, 3, 4。
sum := 0
for i, num := range nums { //使用range遍历切片nums,i为当前元素的索引,num为该位置的值。
sum += num //将切片中的每个元素累加到sum 中,最终 sum 的值为 2 + 3 + 4 = 9。
if num == 2 { //当元素值为 2 时,打印当前元素的索引和值。由于 num 的值为 2 出现时,打印索引 0 和 num 为 2。
fmt.Println("index:", i, "num:", num) // index: 0 num: 2
}
}
fmt.Println(sum) // 9
m := map[string]string{"a": "A", "b": "B"}//定义并初始化一个 map,键是字符串,值也是字符串。
for k, v := range m { //使用 range 遍历 map,k 是键,v 是对应的值.
fmt.Println(k, v) // b 8; a A
}
for k := range m {
fmt.Println("key:", k) // key a; key b
}
}
10.函数
函数和c++类似,定义和调用。
11.指针
值传递,引用传递和c++类似。
12.结构体
定义结构体
type user struct {
name string
password string
}
a := user{name: "wang", password: "1024"}:字面初始化 user 结构体。
b := user{"wang", "1024"}:字段按顺序依次填充值。
c := user{name: "wang"}:仅初始化 name 字段,password 字段将自动使用其零值。
c.password = "1024" 给 password 字段赋值。
var d user:声明一个 user 类型的变量 d,初始化为结构体的零值。
d.name = "wang" 和 d.password = "1024" 赋值。
13.结构体方法
14.错误处理
func findUser(users []user, name string) (v *user, err error) {
for _, u := range users {
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}
findUser 函数接受一个 user 类型的切片 users 和一个 name 字符串,返回一个指向 user 的指针(*user)和一个 error 类型的值。
该函数遍历 users 切片,查找名字与给定 name 匹配的用户。 如果找到了匹配的 user,返回其地址(指针)和 nil 错误。如果没有找到,返回 nil 和一个新的错误,内容为 "not found"。
15.字符串操作
func main() {
a := "hello"
//strings.Contains 检查字符串 a 中是否包含子串 "ll"。
fmt.Println(strings.Contains(a, "ll")) // true
//strings.Count 统计子串 "l" 在字符串 a 中出现的次数。
fmt.Println(strings.Count(a, "l")) // 2
//strings.HasPrefix 检查字符串 a 是否以子串 "he" 开头。
fmt.Println(strings.HasPrefix(a, "he")) // true
//strings.HasSuffix 检查字符串 a 是否以子串 "llo" 结尾。
fmt.Println(strings.HasSuffix(a, "llo")) // true
//strings.Index 返回子串 "ll" 在字符串 a 中首次出现的位置。
fmt.Println(strings.Index(a, "ll")) // 2
//strings.Join 将一个字符串切片 []string{"he", "llo"} 使用 "-" 连接起来。
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
//strings.Repeat 将字符串 a 重复 2 次。
fmt.Println(strings.Repeat(a, 2)) // hellohello
//strings.Replace 替换字符串 a 中所有的 "e" 为 "E"
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
//strings.Split 根据分隔符 "-" 分割字符串 "a-b-c"。
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
//strings.ToLower 将字符串 a 转换为小写。
fmt.Println(strings.ToLower(a)) // hello
//strings.ToUpper 将字符串 a 转换为大写。
fmt.Println(strings.ToUpper(a)) // HELLO
//strings.ToUpper 将字符串 a 转换为大写。
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
}
16.字符串格式化
fmt.Printf 可以用于格式化输出。%v 是 Go 中的默认格式化动词,适用于大多数数据类型。 fmt.Printf("s=%v\n", s) 会输出 s=hello,因为 s 是字符串。
fmt.Printf("p=%v\n", p) 会输出 p={1 2},因为 p 是结构体。
17.json处理
18.时间处理
19.数字解析
trconv.ParseFloat:解析浮点数 strconv.ParseInt:解析整数 strconv.ParseInt(十六进制解析) strconv.Atoi:解析整数(简化版的 ParseInt) 错误处理:strconv.Atoi 解析失败
20.进程信息
1.获取程序的命令行参数 (os.Args)。 fmt.Println(os.Args)
2.获取和设置环境变量 (os.Getenv, os.Setenv)。fmt.Println(os.Getenv("PATH")),fmt.Println(os.Setenv("AA", "BB"))
3.执行外部命令并处理其输出 (exec.Command 和 CombinedOutput)。
buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()