这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
1.基础语法-strings
package main
import (
"fmt"
"strings"
)
func main() {
a := "byte dance"
// Contains:判断字符串中是否包含byte样例的字符,返回bool类型
// 返回结果:true
fmt.Println(strings.Contains(a, "byte"))
// Count:包含几个字符,返回int类型
// 1
fmt.Println(strings.Count(a, "b"))
// HasPrefix:判断字符串是否以by开头,返回bool类型
// true
fmt.Println(strings.HasPrefix(a, "by"))
// HasPrefix:判断字符串是否以dance结尾,返回bool类型
// true
fmt.Println(strings.HasSuffix(a, "dance"))
// Index:返回yt第一次出现的位置,如果字符串中有两个yt,只返回第一次出现的yt下标,即y的下标,返回int类型
// 1
fmt.Println(strings.Index(a, "yt"))
// Join:拼接操作,将he和llo进行拼接操作
// he-llo
fmt.Println(strings.Join([]string{"he", "llo"}, "-"))
// 字符串进行重复操作,重复的字符串之间没有空格的出现,如下
// byte dancebyte dance
fmt.Println(strings.Repeat(a, 2))
// 将字符串中a中的"e"替换为"E"
// 如果old为空,则在字符串每个字符的开头进行匹配操作,替换结果:ObOyOtOeO OdOaOnOcOeO
// 最后一个参数-1的含义:如果n<0则表示查找字符串中所有满足要求的数据信息进行替换操作
// 如果n>0,例如n=1,则只替换字符串中从下标0开始第一个满足要求的数据
// 可以对空格进行匹配操作
fmt.Println(strings.Replace(a, "", "O", -1)) //ObOyOtOeO OdOaOnOcOeO
fmt.Println(strings.Replace(a, "e", "E", -1)) //bytE dancE
fmt.Println(strings.Replace(a, "e", "E", 1)) //bytE dance
// 按照指定字符串进行分隔,返回的是[]string(string类型的切片),实际用的挺多的
// [a b c]
fmt.Println(strings.Split("a-b-c", "-"))
// 字符串全部小写
// byte dance
fmt.Println(strings.ToLower(a))
// 字符串全部大写
// BYTE DANCE
fmt.Println(strings.ToUpper(a))
// 返回字符串的长度信息
// byte dance,空格占一个字节
// 10
fmt.Println(len(a))
// 1个汉字占3个字节+","
// 19
b := "你好,字节跳动"
fmt.Println(len(b))
}
2.基础语法-fmt
package main
import "fmt"
type point struct {
x, y int
}
func main() {
s := "hello"
n := 123
p := point{1, 2}
fmt.Println(s, n) // hello 123
fmt.Println(p) // {1 2}
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
// fmt.Sprintf貌似在项目中用的更多一些,可以将非字符串的数据拼接转化为字符串
// 192.168.101.132:80
str := fmt.Sprintf("%s:%d","192.168.101.132", 80)
fmt.Println(str)
}
3.基础语法-json
package main
import (
"encoding/json"
"fmt"
)
type userInfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
func main() {
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
if err != nil {
panic(err)
}
fmt.Println(buf) // [123 34 78 97...]
fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
/*
{
"Name": "wang",
"age": 18,
"Hobby": [
"Golang",
"TypeScript"
]
}
*/
buf, err = json.MarshalIndent(a, "", "\t")
if err != nil {
panic(err)
}
fmt.Println(string(buf))
// 反序列化中传入的&b结构体信息一定要和序列化的时候保持一致
var b userInfo
err = json.Unmarshal(buf, &b)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}
4.基础语法-time
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now) // 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)
t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)
fmt.Println(t) // 2022-03-27 01:25:36 +0000 UTC
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25
fmt.Println(t.Format("2006-01-02 15:04:05")) // 2022-03-27 01:25:36, 必须以2006-01-02 15:04:05为模板进行格式化
diff := t2.Sub(t) // 返回时间差
fmt.Println(diff) // 1h5m0s
fmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900
t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")
if err != nil {
panic(err)
}
fmt.Println(t3) //2022-03-27 01:25:36 +0000 UTC
fmt.Println(t) //2022-03-27 01:25:36 +0000 UTC
fmt.Println(t3 == t) // true
fmt.Println(now.Unix()) // 1648738080,返回格林威治时间1970年01月01日00时00分00秒起到此时此刻的格林威治时间(假如是00点)的【总秒数】
}
5.基础语法-strconv
package main
import (
"fmt"
"strconv"
)
func main() {
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123")
fmt.Println(n2) // 123
n2, err := strconv.Atoi("AAA")
fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}
6.基础语法-os
- func Hostname() (name string, err error) // Hostname返回内核提供的主机名
- func Environ() []string // Environ返回表示环境变量的格式为”key=value”的字符串的切片拷贝
- func Getenv(key string) string // Getenv检索并返回名为key的环境变量的值
- func Getpid() int // Getpid返回调用者所在进程的进程ID
- func Exit(code int) // Exit让当前程序以给出的状态码code退出。一般来说,状态码0表示成功,非0表示出错。程序会立刻终止,defer的函数不会被执行
- func Stat(name string) (fi FileInfo, err error) // 获取文件信息
- func Getwd() (dir string, err error) // Getwd返回一个对应当前工作目录的根路径
- func Mkdir(name string, perm FileMode) error // 使用指定的权限和名称创建一个目录
- func MkdirAll(path string, perm FileMode) error // 使用指定的权限和名称创建一个目录,包括任何必要的上级目录,并返回nil,否则返回错误
- func Remove(name string) error // 删除name指定的文件或目录
- func TempDir() string // 返回一个用于保管临时文件的默认目录
- var Args []string Args保管了命令行参数,第一个是程序名。
- func Setenv(key, value string) error //Setenv 函数可以设置名为 key 的环境变量,如果出错会返回该错误。
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// go run example/20-env/main.go a b c d
fmt.Println(os.Args) // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
fmt.Println(os.Setenv("AA", "BB"))
buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
if err != nil {
panic(err)
}
fmt.Println(string(buf)) // 127.0.0.1 localhost
}
- Go使用exec包调用可执行文件(感觉这里别人总结的挺好的,就拿来主义)