书接上回,更多内容请移步主页查看“后端技术学习总结|青训营”系列。
Go语言语法初步讲解
- 错误处理,errors,返回两个值,两个方法(存疑)
import (
"errors"
"fmt"
)
type user struct {
name string
password string
}
//定义一个找用户的函数
func findUser(users []user, name string) (v *user, err error) {
for _, u := range users {
if u.name == name {
return &u, nil
}
}
//没找到的话for执行完执行这一句
return nil, errors.New("not found")
}
func main() {
u, err := findUser([]user{{"wang", "1024"}}, "wang")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(u.name) // wang
if u, err := findUser([]user{{"wang", "1024"}}, "li"); err != nil {
fmt.Println(err) // not found
return
} else {
fmt.Println(u.name)
}
}
- 字符串操作、字符串格式化
import (
"fmt"
"strings"
)
type point struct {
x, y int
}
func main() {
a := "hello"
//判断字符串1是否存在字符串2
fmt.Println(strings.Contains(a, "ll")) // true
//统计字符串2在字符串1中出现的字数,如果字符串2为空字符串,那么将返回字符串1的“长度+1”的数值
fmt.Println(strings.Count(a, "l")) // 2
//是否以XX开头
fmt.Println(strings.HasPrefix(a, "he")) // true
//是否以XX结尾
fmt.Println(strings.HasSuffix(a, "llo")) // true
//查找子字符串在主字符串中的位置
fmt.Println(strings.Index(a, "ll")) // 2
//在XX和XXX之间添加XX
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
//重复
fmt.Println(strings.Repeat(a, 2)) // hellohello
//替换,a为要处理的字符串,e为要替换的,E为替换结果,-1表示替换全部
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
//以指定的分隔符切割字符串并输出结果切片
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
//大写转小写
fmt.Println(strings.ToLower(a)) // hello
//小写转大写
fmt.Println(strings.ToUpper(a)) // HELLO
//打印长度
fmt.Println(len(a)) // 5
//一个中文符号占3个字符(UTF-8情形下)
b := "你好"
fmt.Println(len(b)) // 6
//字符串格式化
s := "hello"
n := 123
p := point{1, 2} // point结构体见上定义
fmt.Println(s, n) // hello 123
fmt.Println(p) // {1 2}
//直接用v,不用区分,+变详细,#更详细
fmt.Printf("s=%v\n", s) // s=hello
fmt.Printf("n=%v\n", n) // n=123
fmt.Printf("p=%v\n", p) // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}
f := 3.141592653
fmt.Println(f) // 3.141592653
//保留两位小数打印
fmt.Printf("%.2f\n", f) // 3.14
}