KCloud-Platform-IoT KCloud-Platform-IoT
首页
  • 开发手册

    • 组件【ai】
    • 组件【algorithm】
    • 组件【banner】
    • 组件【core】
    • 组件【bom】
    • 组件【cors】
    • 组件【domain】
    • 组件【crypto】
    • 组件【data-cache】
    • 组件【elasticsearch】
    • 组件【excel】
    • 组件【i18n】
    • 组件【idempotent】
    • 组件【influxdb】
    • 组件【kafka】
    • 组件【log】
    • 组件【lock】
    • 组件【mail】
    • 组件【log4j2】
    • 组件【mqtt】
    • 组件【mybatis-plus】
    • 组件【nacos】
    • 组件【netty】
    • 组件【openapi-doc】
    • 组件【oss】
    • 组件【prometheus】
    • 组件【rate-limiter】
    • 组件【reactor】
    • 组件【redis】
    • 组件【secret】
    • 组件【security】
    • 组件【sensitive】
    • 组件【sms】
    • 组件【snail-job】
    • 组件【storage】
    • 组件【tdengine】
    • 组件【tenant】
    • 组件【test】
    • 组件【trace】
    • 组件【xss】
  • 环境搭建

    • Centos7安装Mysql 8.0.33
    • Centos7安装Redis 7.0.11
    • Centos7安装RocketMQ 5.1.1
    • Centos7安装Jdk 17.0.7
    • Centos7安装Docker 23.0.6
    • Centos7安装Elasticsearch 8.6.2
    • Docker安装RabbitMQ 3.12.2
    • Docker安装Postgresql 16.1
    • Ubuntu20.04安装Docker
    • Ubuntu20.04忘记密码或指纹错误
  • 常用命令

    • Centos7常用命令
    • Centos7常用命令
  • 快速上手

    • 项目启动【dev环境】
    • 项目启动【test环境】
    • 项目启动【prod环境】
    • 更新日志
  • 前端指南

    • 前端启动
  • 后端指南

    • COLA代码规范
    • SSL证书
    • 一键修改项目模块
    • 一键生成项目骨架
    • 一键修改项目版本号
    • 一键跳过测试用例
    • 一键生成后端COLA代码
    • 分布式链路跟踪之ELK日志
    • 一键检查代码规范
    • 动态路由
  • 项目部署

    • 项目部署之镜像打包与推送
  • 其他

    • Java如何快速转Go
    • Go快速开发API
    • Vue快速开发Api
    • React快速开发Api
  • 文章

    • 物联网之对接MQTT最佳实践
    • 物联网之使用Vertx实现MQTT-Server最佳实践【响应式】
    • vue3+lime-echart各种图表使用【懒人专用,建议收藏】
    • 物联网之使用Vertx实现TCP最佳实践【响应式】
    • 物联网之使用Vertx实现HTTPWebSocket最佳实践【响应式】
    • 物联网之使用Vertx实现UDP最佳实践【响应式】
    • Spring Cloud Gateway实现分布式限流和熔断降级
  • 文章

    • IntelliJ IDEA插件推荐
  • 活动

    • KCloud-Platform-IoT 开源三周年快乐&父亲节快乐
  • 儒学

    • 儒学摘抄(一)
  • 禅语

    • 禅语摘抄(一)
  • 诗词

    • 诗词摘抄(一)
  • 道法

    • 道法摘抄(一)
  • 养生

    • 养生摘抄(一)
  • 读后感

    • 读《强者,都是含泪奔跑的人》读后感
  • 修行

    • 修身/养生/情感
  • 觉悟

    • 觉悟日记(一)
赞助
项目课程 (opens new window)
GitHub (opens new window)
首页
  • 开发手册

    • 组件【ai】
    • 组件【algorithm】
    • 组件【banner】
    • 组件【core】
    • 组件【bom】
    • 组件【cors】
    • 组件【domain】
    • 组件【crypto】
    • 组件【data-cache】
    • 组件【elasticsearch】
    • 组件【excel】
    • 组件【i18n】
    • 组件【idempotent】
    • 组件【influxdb】
    • 组件【kafka】
    • 组件【log】
    • 组件【lock】
    • 组件【mail】
    • 组件【log4j2】
    • 组件【mqtt】
    • 组件【mybatis-plus】
    • 组件【nacos】
    • 组件【netty】
    • 组件【openapi-doc】
    • 组件【oss】
    • 组件【prometheus】
    • 组件【rate-limiter】
    • 组件【reactor】
    • 组件【redis】
    • 组件【secret】
    • 组件【security】
    • 组件【sensitive】
    • 组件【sms】
    • 组件【snail-job】
    • 组件【storage】
    • 组件【tdengine】
    • 组件【tenant】
    • 组件【test】
    • 组件【trace】
    • 组件【xss】
  • 环境搭建

    • Centos7安装Mysql 8.0.33
    • Centos7安装Redis 7.0.11
    • Centos7安装RocketMQ 5.1.1
    • Centos7安装Jdk 17.0.7
    • Centos7安装Docker 23.0.6
    • Centos7安装Elasticsearch 8.6.2
    • Docker安装RabbitMQ 3.12.2
    • Docker安装Postgresql 16.1
    • Ubuntu20.04安装Docker
    • Ubuntu20.04忘记密码或指纹错误
  • 常用命令

    • Centos7常用命令
    • Centos7常用命令
  • 快速上手

    • 项目启动【dev环境】
    • 项目启动【test环境】
    • 项目启动【prod环境】
    • 更新日志
  • 前端指南

    • 前端启动
  • 后端指南

    • COLA代码规范
    • SSL证书
    • 一键修改项目模块
    • 一键生成项目骨架
    • 一键修改项目版本号
    • 一键跳过测试用例
    • 一键生成后端COLA代码
    • 分布式链路跟踪之ELK日志
    • 一键检查代码规范
    • 动态路由
  • 项目部署

    • 项目部署之镜像打包与推送
  • 其他

    • Java如何快速转Go
    • Go快速开发API
    • Vue快速开发Api
    • React快速开发Api
  • 文章

    • 物联网之对接MQTT最佳实践
    • 物联网之使用Vertx实现MQTT-Server最佳实践【响应式】
    • vue3+lime-echart各种图表使用【懒人专用,建议收藏】
    • 物联网之使用Vertx实现TCP最佳实践【响应式】
    • 物联网之使用Vertx实现HTTPWebSocket最佳实践【响应式】
    • 物联网之使用Vertx实现UDP最佳实践【响应式】
    • Spring Cloud Gateway实现分布式限流和熔断降级
  • 文章

    • IntelliJ IDEA插件推荐
  • 活动

    • KCloud-Platform-IoT 开源三周年快乐&父亲节快乐
  • 儒学

    • 儒学摘抄(一)
  • 禅语

    • 禅语摘抄(一)
  • 诗词

    • 诗词摘抄(一)
  • 道法

    • 道法摘抄(一)
  • 养生

    • 养生摘抄(一)
  • 读后感

    • 读《强者,都是含泪奔跑的人》读后感
  • 修行

    • 修身/养生/情感
  • 觉悟

    • 觉悟日记(一)
赞助
项目课程 (opens new window)
GitHub (opens new window)
  • 开发手册

    • 组件【ai】
    • 组件【algorithm】
    • 组件【banner】
    • 组件【core】
    • 组件【bom】
    • 组件【cors】
    • 组件【domain】
    • 组件【crypto】
    • 组件【data-cache】
    • 组件【elasticsearch】
    • 组件【excel】
    • 组件【i18n】
    • 组件【idempotent】
    • 组件【influxdb】
    • 组件【kafka】
    • 组件【log】
    • 组件【lock】
    • 组件【mail】
    • 组件【log4j2】
    • 组件【mqtt】
    • 组件【mybatis-plus】
    • 组件【nacos】
    • 组件【netty】
    • 组件【openapi-doc】
    • 组件【oss】
    • 组件【prometheus】
    • 组件【rate-limiter】
    • 组件【reactor】
    • 组件【redis】
    • 组件【secret】
    • 组件【security】
    • 组件【sensitive】
    • 组件【sms】
    • 组件【snail-job】
    • 组件【storage】
    • 组件【tdengine】
    • 组件【tenant】
    • 组件【test】
    • 组件【trace】
    • 组件【xss】
  • 环境搭建

    • Centos7安装Mysql 8.0.33
    • Centos7安装Redis 7.0.11
    • Centos7安装RocketMQ 5.1.1
    • Centos7安装Jdk 17.0.7
    • Centos7安装Docker 23.0.6
    • Docker安装RabbitMQ 3.12.2
    • Centos7安装Elasticsearch 8.6.2
    • Docker安装Postgresql 16.1
    • Ubuntu20.04安装Docker
    • Ubuntu20.04忘记密码或指纹错误
  • 常用命令

    • Centos7常用命令
    • Docker常用命令
  • 快速上手

    • 项目启动【dev环境】
    • 项目启动【test环境】
    • 项目启动【prod环境】
    • 更新日志
  • 前端指南

    • 前端启动
  • 后端指南

    • COLA代码规范
    • SSL证书
    • 一键修改项目模块
    • 一键生成项目骨架
    • 一键修改项目版本号
    • 一键跳过测试用例
    • 一键生成后端COLA代码
    • 分布式链路跟踪之ELK日志
    • 一键检查代码规范
    • 动态路由
    • OAuth2.1流程
  • 项目部署

    • 项目部署之镜像打包与推送
  • 其他

    • Java如何快速转Go
    • Go快速开发API
      • Vue快速开发Api
      • React快速开发Api
    • 文章

      • 物联网之对接MQTT最佳实践
      • 物联网之使用Vertx实现MQTT-Server最佳实践【响应式】
      • vue3+lime-echart各种图表使用【懒人专用,建议收藏】
      • 物联网之使用Vertx实现TCP最佳实践【响应式】
      • 物联网之使用Vertx实现HTTPWebSocket最佳实践【响应式】
      • 物联网之使用Vertx实现UDP最佳实践【响应式】
      • Spring Cloud Gateway实现分布式限流和熔断降级
    • 推荐

      • IntelliJ IDEA插件推荐
    • 活动

      • KCloud-Platform-IoT 开源三周年快乐&父亲节快乐
    • 指南
    • 其他
    KCloud-Platform-IoT
    2025-03-26
    目录

    Go快速开发API

    你好呀,我的老朋友!我是老寇,欢迎来到老寇云平台!

    # JSON互转

    type Test struct {
    	Name string `json:"name"`
    	Age  int    `json:"age"`
    }
    
    func TestJson(t *testing.T) {
    	test := Test{
    		Name: "张三",
    		Age:  18,
    	}
    	buf, _ := json.Marshal(test)
    	// 输出 => [123 34 110 97 109 101 34 58 34 229 188 160 228 184 137 34 44 34 97 103 101 34 58 49 56 125]
    	fmt.Println("对象转换成字节:", buf)
    
    	var tes Test
    	err := json.Unmarshal(buf, &tes)
    	if err != nil {
    		fmt.Println("json unmarshal error:", err)
    	}
    	// 输出 => {张三 18}
    	fmt.Println("字节转换成对象:", tes)
    }
    

    # 时间互转

    func TestTimestamp(t *testing.T) {
    	now := time.Now()
    
    	// =======================格式化=======================
    
    	// 类似输出 => 1743003091
    	timestamp := now.Unix()
    	fmt.Println("当前时间【秒级】:", timestamp)
    
    	// 类似输出 => 1743003091022
    	timestamp = now.UnixMilli()
    	fmt.Println("当前时间【毫秒级】:", timestamp)
    
    	// 类似输出 => 1743003091022934300
    	timestamp = now.UnixNano()
    	fmt.Println("当前时间【纳秒级】:", timestamp)
    
    	// 类似输出 => 2025-03-26 23:31:31
    	dateTimeStr := now.Format("2006-01-02 15:04:05")
    	fmt.Println("当前时间【格式化字符串】:", dateTimeStr)
    
    	// 类似输出 => 2025-03-26
    	dateStr := now.Format("2006-01-02")
    	fmt.Println("当前日期【格式化字符串】:", dateStr)
    
    	// 类似输出 => 23:31:31
    	timeStr := now.Format("15:04:05")
    	fmt.Println("当前时间【格式化字符串】:", timeStr)
    
    	// 输出 => 2025-03-26 23:29:45 +0800 CST
    	timestamp = int64(1743002985)
    	dateTime := time.Unix(timestamp, 0)
    	fmt.Println("时间:", dateTime)
    
    	// 类似输出 => 2025年03月26日 23:39
    	dateTimeStr = now.Format("2006年01月02日 15:04")
    	fmt.Println("当前时间【格式化字符串】:", dateTimeStr)
    
    	// 类似输出 => 2025-03-26T23:40:08+08:00
    	fmt.Println("时间【格式化字符串】:", now.Format(time.RFC3339))
    
    	// 输出 => 2025-03-26 23:47:31 +0000 UTC
    	dateTimeStr = "2025-03-26 23:47:31"
    	dateTime, _ = time.Parse("2006-01-02 15:04:05", dateTimeStr)
    	fmt.Println("时间:", dateTime)
    
    	// =======================格式化=======================
    
    	// =======================时区=======================
    
    	// 输出 => Local
    	fmt.Println("时区:", now.Location())
    
    	// 输出 => 2025-03-26 23:58:31 +0800 CST
    	// 设置时区
    	loc, _ := time.LoadLocation("Asia/Shanghai")
    	dateTime = time.Date(2025, 3, 26, 23, 58, 31, 0, loc)
    	fmt.Println("时间:", dateTime)
    
    	// 转换时区
    	utc := now.UTC()
    	// 类似输出 => 2025-03-26 16:01:47.8120287 +0000 UTC
    	fmt.Println("UTC时间:", utc)
    	dateTime = now.In(time.FixedZone("CST", 8*3600))
    	// 类似输出 => 2025-03-27 00:01:47.8120287 +0800 CST
    	fmt.Println("CST时间:", dateTime)
    
    	// =======================时区=======================
    
    	// =======================时间加减=======================
    
    	// 类似输出 => 2025-03-28 00:03:32.952297 +0800 CST m=+86400.008917201
    	add := now.Add(time.Hour * 24)
    	fmt.Println("时间加1天:", add)
    
    	// 类似输出 => 2025-03-26 00:04:09.7702908 +0800 CST m=-86399.992051199
    	sub := now.Add(-time.Hour * 24)
    	fmt.Println("时间减1天:", sub)
    
    	// 类似输出 => 24h0m0s
    	fmt.Println("时间差:", now.Sub(sub))
    
    	// 类似输出 => 24
    	fmt.Println("时间差:", now.Sub(sub).Hours())
    
    	// 类似输出 => 2025-04-28 00:06:14.4762206 +0800 CST
    	add = now.AddDate(0, 1, 1)
    	fmt.Println("时间加1月1天:", add)
    
    	t1 := now
    	t2 := now.Add(time.Hour * 1)
    	// 输出 => true
    	fmt.Println("比较:", t2.After(t1))
    	// 输出 => true
    	fmt.Println("比较:", t1.Before(t2))
    
    	// =======================时间加减=======================
    
    	// =======================其他=======================
    
    	// 类似输出 => 2025
    	year := now.Year()
    	fmt.Println("年:", year)
    
    	// 类似输出 => 3
    	month := now.Month()
    	fmt.Println("月:", month)
    
    	// 类似输出 => 27
    	day := now.Day()
    	fmt.Println("日:", day)
    
    	// 类似输出 => 0
    	hour := now.Hour()
    	fmt.Println("时:", hour)
    
    	// 类似输出 => 15
    	minute := now.Minute()
    	fmt.Println("分:", minute)
    
    	// 类似输出 => 54
    	second := now.Second()
    	fmt.Println("秒:", second)
    
    	// 类似输出 => Thursday
    	weekday := now.Weekday()
    	fmt.Println("星期:", weekday)
    
    	// 类似输出 => 2025-03-26 08:00:00 +0800 CST
    	truncate := now.Truncate(24 * time.Hour)
    	fmt.Println("时间截断:", truncate)
    
    	// 类似输出 => 2025-03-27 00:00:00 +0800 CST
    	round := now.Round(time.Hour)
    	fmt.Println("时间四舍五入:", round)
    
    	// =======================其他=======================
    
    	// =======================周期任务=======================
    
    	// 等待2秒【定时器】
    	timer := time.NewTimer(2 * time.Second)
    	<-timer.C
    
    	// 每秒执行一次【周期任务】
    	ticker := time.NewTicker(1 * time.Second)
    	defer ticker.Stop()
    	for range ticker.C {
    	fmt.Println("每秒执行一次")
    	}
    
    	// =======================周期任务=======================
    
    }
    

    # 字符串

    func TestString(t *testing.T) {
    	// =======================基础操作=======================
    	s := "hello"
    	// 输出 => hello world
    	fmt.Printf("%s %s", s, "world")
    	fmt.Println()
    	s += " world"
    	// 输出 => hello world
    	fmt.Println(s)
    	// 输出 => 11
    	fmt.Println(len(s))
    	// 输出 => h
    	fmt.Println(string(s[0]))
    	// 输出 => ello world
    	fmt.Println(s[1:])
    	// =======================基础操作=======================
    
    	// =======================字符串遍历=======================
    	for index, v := range s {
    		fmt.Printf("%d:%s", index, string(v))
    		fmt.Println()
    	}
    	for i := 0; i < len(s); i++ {
    		fmt.Printf("%d:%s", i, string(s[i]))
    		fmt.Println()
    	}
    	// =======================字符串遍历=======================
    
    	// =======================strings操作=======================
    	// 输出 => true
    	fmt.Println(strings.Contains("test", "es"))
    	// 输出 => 2
    	fmt.Println(strings.Count("test", "t"))
    	// 输出 => 1
    	fmt.Println(strings.Index("test", "e"))
    	// 输出 => 1
    	fmt.Println(strings.LastIndex("test", "e"))
    	// 输出 => a-b
    	fmt.Println(strings.Join([]string{"a", "b"}, "-"))
    	// 输出 => tstt
    	// -1表示替换所有
    	// 1表示替换第一个
    	// 0表示不替换
    	fmt.Println(strings.Replace("test", "es", "st", -1))
    	// 输出 => test
    	fmt.Println(strings.Replace("test", "es", "st", 0))
    	// 输出 => tstt
    	fmt.Println(strings.Replace("test", "es", "st", 1))
    	// 输出 => true
    	fmt.Println(strings.HasSuffix("test", "st"))
    	// 输出 => true
    	fmt.Println(strings.HasPrefix("test", "te"))
    	// 输出 => A B C
    	fmt.Println(strings.Trim(" !!! A B C !!! ", " !!! "))
    	// 输出 =>  !!! A B C
    	fmt.Println(strings.TrimSuffix(" !!! A B C !!! ", " !!! "))
    	// 输出 => A B C !!!
    	fmt.Println(strings.TrimPrefix(" !!! A B C !!! ", " !!! "))
    	// 输出 => !!! A B C !!!
    	fmt.Println(strings.TrimSpace(" !!! A B C !!! "))
    	// 输出 => A B C !!!
    	fmt.Println(strings.TrimLeft(" !!! A B C !!! ", " !!! "))
    	// 输出 =>  !!! A B C
    	fmt.Println(strings.TrimRight(" !!! A B C !!! ", " !!! "))
    	// 输出 => A B C !!!
    	fmt.Println(strings.TrimLeftFunc(" !!! A B C !!! ", func(r rune) bool {
    		return r == ' ' || r == '!'
    	}))
    	// 输出 =>  !!! A B C
    	fmt.Println(strings.TrimRightFunc(" !!! A B C !!! ", func(r rune) bool {
    		return r == ' ' || r == '!'
    	}))
    	// 输出 => [a b c]
    	fmt.Println(strings.Split("a,b,c", ","))
    	// 输出 => [a b,c]
    	fmt.Println(strings.SplitN("a,b,c", ",", 2))
    	// 输出 => [a, b, c]
    	fmt.Println(strings.SplitAfter("a,b,c", ","))
    	// 输出 => [a, b,c]
    	fmt.Println(strings.SplitAfterN("a,b,c", ",", 2))
    	// 输出 => [a b c d]
    	fmt.Println(strings.Fields(" a b c\td"))
    	// 输出 => [a b c d]
    	fmt.Println(strings.FieldsFunc(" a b c\td", func(r rune) bool {
    		return r == ' ' || r == '\t'
    	}))
    	// 输出 => AAb
    	fmt.Println(strings.Map(func(r rune) rune {
    		if r == 'a' {
    			return 'A'
    		}
    		return r
    	}, "aab"))
    	// 输出 => AAb
    	fmt.Println(strings.ToUpper("aab"))
    	// 输出 => aab
    	fmt.Println(strings.ToLower("AAB"))
    	// 输出 => AAB
    	fmt.Println(strings.ToTitle("AAB"))
    	// 输出 => aab
    	fmt.Println(strings.ToValidUTF8("aab", "b"))
    	// =======================strings操作=======================
    
    	// =======================字符串转换=======================
    	// 输出 => abc
    	fmt.Println(string([]byte{97, 98, 99}))
    	// 输出 => abc
    	fmt.Println(string([]rune{97, 98, 99}))
    	// 输出 => abc
    	fmt.Println(string([]rune{0x61, 0x62, 0x63}))
    	// 输出 => 1
    	numStr := "123"
    	num, _ := fmt.Sscan(numStr, &numStr)
    	fmt.Println(num)
    	// 输出 => 123
    	num, _ = strconv.Atoi(numStr)
    	fmt.Println(num)
    	// 输出 => 123
    	numStr = strconv.Itoa(num)
    	fmt.Println(numStr)
    	// =======================字符串转换=======================
    
    	// =======================字符串构建=======================
    	// 输出 => hello world!
    	builder := strings.Builder{}
    	builder.WriteString("hello")
    	builder.WriteRune(' ')
    	builder.WriteString("world")
    	builder.WriteString("!")
    	fmt.Println(builder.String())
    	// 输出 => hello
    	builder.Reset()
    	builder.WriteString("hello")
    	fmt.Println(builder.String())
    	// 输出 => hello world!
    	var buf bytes.Buffer
    	buf.WriteString("hello")
    	buf.WriteRune(' ')
    	buf.WriteString("world")
    	buf.WriteString("!")
    	fmt.Println(buf.String())
    	// =======================字符串构建=======================
    }
    

    我是老寇,我们下次再见啦!

    上次更新: 6/16/2025, 4:05:10 PM
    Java如何快速转Go
    Vue快速开发Api

    ← Java如何快速转Go Vue快速开发Api→

    Theme by Vdoing | Copyright © 2022-2025 laokou | Apache 2.0 License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式