Golang常用标准库

一,fmt输入输出

package main

import "fmt"

// fmt,格式化输入输出库
func main() {
	//输出
	//输出字符串
	fmt.Print("hello", "world", "\n")
	fmt.Println("自动换行")
	//格式化输出
	fmt.Printf("姓名:%s,年龄:%d", "alice", 22)
	//格式化占位符
	fmt.Printf("%s %d %t\n", "字符串", 22, true) //字符串,数值,bool
	//浮点型占位符
	fmt.Printf("%f\n", 12.34)
	//指定浮点型精度
	fmt.Printf("%6.1f\n", 12.34) //指定宽度6和精度1
	fmt.Printf("%.1f\n", 12.34)  //指定精度为1

	//输入,获取用户输入的值
	var name string
	var age int
	// fmt.Print("请输入姓名:")
	// fmt.Scan(&name)
	// fmt.Print("请输入年龄:")
	// fmt.Scan(&age)
	// fmt.Println("你输入的姓名是:", name, ",年龄是:", age)
	// //一次输入多个
	// fmt.Print("请输入姓名和年龄:")
	// fmt.Scan(&name, &age)
	// fmt.Println("你输入的姓名是:", name, ",年龄是:", age)
	//格式化输入
	fmt.Print("请输入姓名和年龄:")
	fmt.Scanf("姓名 %s 年龄 %d ", &name, &age) //输入格式:姓名 alice 年龄 22,必须以空格分隔
	fmt.Println("你输入的姓名是:", name, ",年龄是:", age)
}

二,log日志

package main

import (
	"log"
	"os"
)

// log,内置的简单的日志库
func main() {
	//基本用法
	// log.Print("hello")
	// log.Printf("hello %s", "alice") //格式化打印
	// log.Println("hello bob")        //打印并且换行

	//log.Fatalln("hello")//打印日志,退出
	//log.Panicln("hello") //打印日志,及其详细信息,退出

	//配置
	log.SetPrefix("test: ")                                 //设置前缀
	log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds) //设置格式

	f, err := os.OpenFile("./cli.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0755)
	if err != nil {
		log.Fatal(err)
	}
	log.SetOutput(f) //设置日志的输出位置

	log.Println("1234")
}

三,time时间

package main

import (
	"fmt"
	"time"
)

// time 时间处理
func main() {
	//获取当前时间
	now := time.Now()
	fmt.Println(now)

	//时间格式化输出
	layout := "2006-01-02 15:04:05" //时间格式化的模板
	fmt.Println("当前时间:", now.Format(layout))

	//将字符串转化为时间
	ts := "2007-02-03 16:05:06.778899"
	t1, err := time.Parse(layout, ts)
	if err != nil {
		panic(err)
	}
	fmt.Println("字符串转化:", t1)

	//时区
	loc, err := time.LoadLocation("America/New_York")
	if err != nil {
		panic(err)
	}
	fmt.Println("纽约时间:", now.In(loc))

	//指定时区
	loc2, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		panic(err)
	}
	fmt.Print("上海时间:")
	fmt.Println(time.ParseInLocation(layout, ts, loc2))

	//时间的运算
	fmt.Println("当前时间+1小时:", now.Add(1*time.Hour))    //当前时间+1小时
	fmt.Println("当前时间-5分钟:", now.Add(-5*time.Minute)) //当前时间-5分钟
	fmt.Println("加一年 一月 减一天:", now.AddDate(1, 1, -1)) //加一年 一月 减一天的时间
	t2 := now.Add(1 * time.Hour)
	fmt.Println("两个时间相减:", now.Sub(t2)) //两个时间相减

	//时间的比较
	fmt.Println("是否相等:", now.Equal(t2))     //是否相等 =
	fmt.Println("是否在t2之后:", now.After(t2))  //是否在t2之后 >
	fmt.Println("是否在t2之前:", now.Before(t2)) //是否在t2之前 <

	//时间戳
	fmt.Println("时间戳 秒:", now.Unix())       //时间戳 秒
	fmt.Println("时间戳 毫秒:", now.UnixMilli()) //时间戳 毫秒
	fmt.Println("时间戳 微秒:", now.UnixMicro()) //时间戳 微秒
	fmt.Println("时间戳 纳秒:", now.UnixNano())  //时间戳 纳秒
}

四,strconv字符串的转换

package main

import (
	"log"
	"math"
	"strconv"
)

// strconv,字符串和基本数据类型之间的转换
func main() {

	//字符串和int类型转换
	//字符串转int
	i, err := strconv.Atoi("101")
	if err != nil {
		log.Fatalln(err)
	}
	log.Printf("%v,%T", i, i) //打印值和类型

	//int转字符串
	log.Println(strconv.Itoa(102))



	//字符串和bool的转换
	//字符串转bool
	b, err := strconv.ParseBool("false")
	if err != nil {
		log.Fatalln(err)
	}
	log.Printf("%v,%T", b, b) //打印值和类型

	//bool转字符串
	log.Println(strconv.FormatBool(true)) //true



	//字符串和float 类型的转换
	f, err := strconv.ParseFloat("3.1415926", 64) //32:float32,64:float64
	if err != nil {
		log.Println(err)
	}
	log.Printf("%v,%T", f, f)

	//float转换为字符串
	log.Println(strconv.FormatFloat(math.Pi, 'f', 2, 64)) //值,格式,精度,大小



	//字符串和int64 int32 int16 int8之间的转换
	//字符串转换为 int64
	i2, err := strconv.ParseInt("123", 10, 64) //值,进制,大小
	if err != nil {
		log.Println(err)
	}
	log.Printf("%v,%T", i2, i2)

	//int64转换为字符串
	log.Println(strconv.FormatInt(456, 10))

	//字符串转换为 uint64
	ui, err := strconv.ParseUint("123", 10, 64) //值,进制,大小
	if err != nil {
		log.Println(err)
	}
	log.Printf("%v,%T", ui, ui)

	//uint64转换为字符串
	log.Println(strconv.FormatUint(456, 10))
}

五,flag命令行参数解析

package main

import (
	"flag"
	"fmt"
	"strings"
)

// 实现接口
//
//	type Value interface{
//		String() string
//		Set(string) error
//	}
type Hobby []string

func (h *Hobby) String() string {
	return strings.Join(*h, ",")
}
func (h *Hobby) Set(s string) error {
	for _, v := range strings.Split(s, ",") {
		*h = append(*h, v)
	}
	return nil
}

// flag 命令行参数解析
func main() {
	name := flag.String("name", "", "姓名") //名字,默认值,用法说明
	age := flag.Int("age", 22, "年龄")

	var gender string
	flag.StringVar(&gender, "gender", "", "性别") //值 地址,名字,默认值,说明

	//将参数值绑定到结构体
	var hobby Hobby
	flag.Var(&hobby, "hobby", "爱好") //值,名字,说明

	//测试:命令行:./client -name "alice" -age 22 -gender M -hobby "sing,dance,play games" aa bb cc
	flag.Parse()
	fmt.Println(*name, *age)
	fmt.Println(gender)
	fmt.Println(hobby)

	fmt.Println(flag.Args())  //获取后面多余的参数
	fmt.Println(flag.NArg())  //获取后面多余参数的个数
	fmt.Println(flag.NFlag()) //获取flag参数的个数
}

六,strings字符串处理

package main

import (
	"fmt"
	"strings"
)

// strings 字符串处理
func main() {
	s1 := "hello world myworld"
	//字符串替换
	fmt.Println(strings.Replace(s1, "world", "golang", -1)) //需要替换的字符串,被替换的,替换为,替换次数 -1次数不限
	fmt.Println(strings.ReplaceAll(s1, "world", "golang"))  //等同于上一行代码

	//字符串查找
	fmt.Println(strings.Index(s1, "w")) //某个字符在字符串中(首次)存在的位置

	//判断字符串是否包含某个字符串
	fmt.Println(strings.Contains(s1, "wo")) //返回bool

	//字符串的填充
	fmt.Println(strings.Repeat("*", 10)) //10个*

	//字符串分割为切片
	fmt.Println(strings.Split(s1, " ")) //以空格分隔

	//将切片组合为字符串
	names := []string{"alice", "bob"}
	fmt.Println(strings.Join(names, ", ")) //以, (逗号+空格)分隔

	//字符串大小写转换
	fmt.Println(strings.ToLower(s1)) //转小写
	fmt.Println(strings.ToUpper(s1)) //转大写

	//字符串去除
	s2 := "  hello everybody"
	fmt.Println(strings.Trim(s2, " ")) //去除空格
	fmt.Println(strings.TrimSpace(s2))
	fmt.Println(strings.TrimPrefix("a_alice_a", "a_")) //去除前缀
	fmt.Println(strings.TrimSuffix("a_alice_a", "_a")) //去除后缀

	//是否存在前后缀
	fmt.Println(strings.HasPrefix("a_alice_a", "a_")) //是否存在前缀,返回bool
	fmt.Println(strings.HasSuffix("a_alice_a", "_a")) //是否存在后缀
}

七,math数学常量和数学运算

package main

import (
	"fmt"
	"math"
)

// math提供基本的数学常数和函数
func main() {
	//数学常数
	fmt.Println(math.Pi)
	fmt.Println(math.Sqrt2)

	//数学函数
	math.Abs(-10)  //绝对值
	math.Max(1, 2) //返回最大值
	math.Min(1, 2) //返回最小值

	math.Ceil(5.1)  //6,向上取整
	math.Floor(5.1) //5,向下取整
	math.Round(5.1) //5,四舍五入

	math.Mod(3, 2) //1,求余数
	math.Sqrt(2)   //平方根
	math.Pow(2, 3) //8,二的三次方

	//三角函数
	fmt.Println(math.Sin(45))
	fmt.Println(math.Cos(45))
	fmt.Println(math.Tan(45))
}

八,sort排序

package main

import (
	"fmt"
	"sort"
)

type User struct {
	Name string
	Age  int
}
type Users []User

func (users Users) Len() int {
	return len(users)
}
func (users Users) Less(i, j int) bool {
	return users[i].Age < users[j].Age
}
func (users Users) Swap(i, j int) {
	users[i], users[j] = users[j], users[i]
}

// sort 排序
func main() {
	numbers := []int{6, 3, 1, 6, 8, 9, 2, 0, -5}
	fmt.Println("未排序:", numbers)

	//升序
	sort.Ints(numbers)
	fmt.Println("升序:", numbers)
	//降序
	sort.Sort(sort.Reverse(sort.IntSlice(numbers)))
	fmt.Println("降序:", numbers)

	//用法与上述一致
	//sort.Strings()对字符串排序
	//sort.Float64s()对浮点型排序

	//自定义结构的排序
	//方法一
	users := []User{
		{Name: "alice", Age: 20},
		{"bob", 22},
		{"eve", 18},
	}
	sort.Slice(users, func(i, j int) bool {
		return users[i].Age < users[j].Age
	})
	fmt.Println(users)

	//方法二
	usersByAge := Users(users)
	sort.Sort(usersByAge) //实现接口 自定义排序
	fmt.Println(usersByAge)
}

九,os系统相关函数

package main

import (
	"fmt"
	"os"
)

// os 操作系统相关函数
func main() {
	//环境变量
	envs := os.Environ()
	fmt.Println(envs[0])
	//获取单个环境变量
	fmt.Println(os.Getenv("GOPATH"))


	//文件和目录的相关操作
	//获取当前目录
	fmt.Println(os.Getwd())

	//切换目录
	os.Chdir("/tmp")
	fmt.Println(os.Getwd())

	//递归创建目录,相当于mkdir -p /tmp/gotest/test1
	err := os.MkdirAll("/tmp/gotest/test1", 0666) //目录,权限
	if err != nil {
		panic(err)
	}

	//删除目录
	os.RemoveAll("/tmp/gotest/") //递归删除当前及其子目录


	//文件操作
	//创建文件
	f, err := os.Create("/tmp/1.txt")
	if err != nil {
		panic(err)
	}
	fmt.Println(f.Name())

	//文件写入
	n, err := f.WriteString("hello world!")
	if err != nil {
		panic(err)
	}
	fmt.Println("成功写入", n, "个字节") //写入的字节数
	defer f.Close()               //关闭文件

	//文件的打开
	f, err = os.OpenFile("/tmp/1.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) //文件,打开方式,权限
	if err != nil {
		panic(err)
	}

	//文件的读取
	content := make([]byte, 1024)
	n, err = f.Read(content)
	if err != nil {
		panic(err)
	}
	fmt.Println("成功读到", n, "个字节:", string(content))

	//获取文件信息
	fi, err := os.Stat("/tmp/1.txt")
	if err != nil {
		panic(err)
	}
	fmt.Println("文件名:", fi.Name(), "  大小:", fi.Size())
}

十,path路径相关操作

package main

import (
	"fmt"
	"path"
)

// path 路径相关操作
func main() {
	//路径信息获取
	fmt.Println(path.Base("/a/b/c.txt"))  //获取路径的最后一个元素
	fmt.Println(path.Dir("/a/b/c.txt"))   //获取路径的目录
	fmt.Println(path.Ext("/a/b/c.txt"))   //路径后缀

	dir, file := path.Split("/a/b/c.txt") //分隔路径的目录和文件名,返回目录 路径
	fmt.Println(dir, file)

	fmt.Println(path.IsAbs("/a/b/c.txt")) //true 判断是否是绝对路径
	fmt.Println(path.IsAbs("a/b/c.txt"))  //false

	fmt.Println(path.Join("a","b","c.txt"))//路径的拼接

	fmt.Println(path.Match("/a/b/*.txt","/a/b/c.txt"))//true路径的匹配
	fmt.Println(path.Match("/a/*.txt","/a/b/c.txt"))//false

	//建议使用filepath 区分操作系统,大多方法和path类似
}

参考链接

Golang并发编程sync包_哔哩哔哩_bilibili

Golang标准库_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值