golang常用库

常用库

fmt

占位符

占位符说明
%v按原本的值来输出
%+v类似%v,但输出结构体是会加上字段名称
%#v在%+v的基础上额外输出类型
%T输出类型
%s输出字符串或者[]byte
%d表示十进制

print

  • Println:
    • 一次输入多个值的时候 Println 中间有空格
    • Println 会自动换行,Print 不会
  • Print:
    • 一次输入多个值的时候 Print 没有 中间有空格
    • Print 不会自动换行
  • Printf
    • Printf 是格式化输出,在很多场景下比 Println 更方便

Sprint

  • 会把答应数据生成,并返回一个字符串

    s2 := fmt.Sprintf("name:%s,age:%d", name, age)
    

time

时间大致有3种类型

  • 时间对象
  • 时间戳
  • 格式化时间
  • Add 用于时间相加
  • Sub 用于两个时间求差值
  • %02d 中的 2 表示宽度,如果整数不够 2 列就补上 0
  • Equal
    • 判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。
    • 本方法和用t==u不同,这种方法还会比较地点和时区信息。
  • Before
    • 如果t代表的时间点在u之前,返回真;否则返回假。
  • After
    • 如果t代表的时间点在u之后,返回真;否则返回假。
  • time.Tick 定时器
package main

import (
	"fmt"
	"time"
)

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

	// 格式化时间
	strTime := now.Format("2006-01-02 15:04:05") 
  // 2006-01-02 15:04:05 必须是这个时间,go诞生的时间 记忆方法就是 2006 1 2 3 4 5
	fmt.Println(strTime)

	//可以将时间对象转换为时间戳
	fmt.Println(now.Unix())

	// 将字符串时间转换为golang中的时间对象
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(loc)
	timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2022/03/28 14:15:20", loc)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("%T %v \n", timeObj, timeObj)

	// Add方法,用于加时间的
	// 1分钟前
	m, _ := time.ParseDuration("-1m")
	m1 := now.Add(m)
	fmt.Println(m1)
	// 1分钟后
	mm, _ := time.ParseDuration("1m")
	mm1 := now.Add(mm)
	fmt.Println(mm1)

	// Sub方法 用于求两个时间的饿差值
	demoSub := mm1.Sub(m1)
	fmt.Println(demoSub)
  
  year := now.Year()     //年
	month := now.Month()   //月
	day := now.Day()       //日
	hour := now.Hour()     //小时
	minute := now.Minute() //分钟
	second := now.Second() //秒
  // 02d表示宽度,不够两位就补上0 比如9就是09 
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
  
  demoEqual := mm1.Equal(m1)
	fmt.Println(demoEqual)

	demoAfter := mm1.After(m1)
	fmt.Println(demoAfter)

	demoBefore := mm1.Before(m1)
	fmt.Println(demoBefore)
}

// 定时任务
func tickDemo() {
	ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器
	for i := range ticker {
		fmt.Println(i) //每秒都会执行的任务
	}
}

OS

操作系统执行命令的函数

参考https://cloud.tencent.com/developer/article/1342799

flag

实现了命令行解析参数,类似python的argparse

package main
import (
	"flag"
	"fmt"
	"time"
)

func main() {
	//定义命令行参数方式1
	var name string
	var age int
	var married bool
	var delay time.Duration
	flag.StringVar(&name, "name", "张三", "姓名") // name就是变量名,张三就是默认值,姓名就是描述
	flag.IntVar(&age, "age", 18, "年龄")
	flag.BoolVar(&married, "married", false, "婚否")
	flag.DurationVar(&delay, "d", 0, "延迟的时间间隔")

	//解析命令行参数
	flag.Parse()
	fmt.Println(name, age, married, delay)
	//返回命令行参数后的其他参数
	fmt.Println(flag.Args())
	//返回命令行参数后的其他参数个数
	fmt.Println(flag.NArg())
	//返回使用的命令行参数个数
	fmt.Println(flag.NFlag())
}

// 查看帮助 go run main.go --help

encoding/json

  • json和struct互相转换
    • 序列化是指把结构体数据转化成 JSON 格式的字符串
    • 反序列化是指把 JSON 数据转化成 Golang 中的结构体对象
    • Golang 中 的 序 列 化 和 反 序 列 化 主 要 通 过 “encoding/json” 包 中 的 json.Marshal() 和 json.Unmarshal()方法实现
  • tag可以用来映射struct中的key和json中的key
package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
	ID int `json:"id,string"`
	// 加上 ,string 可以处理前端传过来的字符串格式的数据,添加string来告诉json包从字符串中解析相应字段的数据
	Gender string `json:"gender"` // tag可以指定struct转换为json的时候的key
	name   string //私有属性不能被 json 包访问
	Age    int    `json:"age"`
}

func structToJson() {
	s1 := Student{
		ID:     1,
		Gender: "xxx",
		name:   "lalala", //小写字母开头的是私有属性,不能被json.Marshal 转换出来
		Age:    18,
	}
	fmt.Printf("%#v \n", s1)

	s, _ := json.Marshal(s1)
	str := string(s)
	fmt.Println(str)
	fmt.Printf("%T", s1.ID)
}
func jsonToStruct() {
	var s2 Student
	str2 := `{"id":"1","gender":"男","Name":"李四","age":19}`
	err := json.Unmarshal([]byte(str2), &s2)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("%#v \n", s2)
}

func main() {
	structToJson()
	jsonToStruct()
}

net-http

  • web服务

  • 请求数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值