类型转换

package _case

import (
	"fmt"
	"strconv"
	"time"
	"unsafe"
)

// ConvertCase 类型转换
func ConvertCase() {
	// 同类型转换 数字和数字 字符串和字符和字节
	// 不同类型转换 数字和字符串
	// 接口类型转其他类型
	// 数字类型转换
	var num1 int = 100
	fmt.Println("int 转 int64 :", int64(num1))

	var num2 int64 = 100
	fmt.Println("int64 转 int: ", int(num2))

	// 字符串与数字类型转换
	var num3 = 100
	fmt.Println("int 转 string: ", strconv.Itoa(num3)+"abc")

	// 字符串转数字类型
	var str1 = "100"
	str1_num, err := strconv.Atoi(str1)
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println("string 转 int: ", str1_num)
	// 数字转字符串
	var num4 int64 = 1010
	// 基于10 进制
	fmt.Println("int64 转 int: ", strconv.FormatInt(num4, 10))
	var str2 = "1010"
	fmt.Println("字符串转数字")
	fmt.Println(strconv.ParseInt(str2, 10, 64))

	// 字符串转byte
	var str3 = "你好世界"
	bytes1 := []byte(str3)
	fmt.Println("字符串转字节: ", bytes1)
	fmt.Println("字节转字符串: ", string(bytes1))

	// 字符串与 rune 转换 ;类似于字符类型.处理 unicode
	var rune1 = []rune(str3)
	fmt.Println("字符串转rune: ", rune1)
	fmt.Println("rune转字符串: ", string(rune1))
	fmt.Println("rune转字符串: ", string(rune1[2])) // 码点索引
	fmt.Println("字符串转 int32: ", []int32(str3))

	// 接口类型转换具体类型
	var inf interface{} = 100
	var infStrut interface{} = user{Name: "like"}
	i, ok := inf.(int)
	fmt.Println("接口类型转换具体类型: ", i, ok)
	u, ok1 := infStrut.(user)
	fmt.Println("接口类型转换具体类型: ", u, ok1)

	// 时间类型转换
	var t time.Time
	t = time.Now()
	timeStr := t.Format("2006-01-02 15:04:05Z07:00")
	fmt.Println("时间类型转换: ", timeStr)
	// 字符串转时间
	t2, _ := time.Parse("2006-01-02 15:04:05Z07:00", timeStr)
	fmt.Println("字符串转时间: ", t2)
	fmt.Println("时间类型转换: ", t2.Unix())

	// uintptr // 指针 类型
	u1 := user{}
	// unsafe.Pointer 不能用于计算
	uPtr := unsafe.Pointer(&u1)
	namePtr := unsafe.Pointer((uintptr(uPtr) + unsafe.Offsetof(u1.Name)))
	*(*string)(namePtr) = "nick"
	fmt.Println(u1)
}

int 转 int64 : 100
int64 转 int:  100
int 转 string:  100abc
string 转 int:  100
int64 转 int:  1010
字符串转数字
1010 <nil>
字符串转字节:  [228 189 160 229 165 189 228 184 150 231 149 140]
字节转字符串:  你好世界
字符串转rune:  [20320 22909 19990 30028]
rune转字符串:  你好世界
rune转字符串:  世
字符串转 int32:  [20320 22909 19990 30028]
接口类型转换具体类型:  100 true
接口类型转换具体类型:  {like 0 { }} true
时间类型转换:  2025-09-17 21:39:07+08:00
字符串转时间:  2025-09-17 21:39:07 +0800 CST
时间类型转换:  1758116347
{nick 0 { }}
posted @ 2025-09-18 11:04  风动随心  阅读(39)  评论(0)    收藏  举报