首页 > 其他分享 >Go - 基本数据类型和其字符串表示之间转换

Go - 基本数据类型和其字符串表示之间转换

时间:2024-01-27 22:12:22浏览次数:25  
标签:Println err strconv fmt 数据类型 字符串 Go main

1. 基本数据类型和其字符串表示之间转换

基本类型的值,都有一个字符串表示,如数字类型值1 字符串表示为 "1",字符的编码为Unicode或者UTF-8,数字的编码是 int,底层存储的数据格式本质上不一样,基本类型的转换本质上只是文法语义上的转化

1.1 Go 语言基本类型

  • 整数 : 有符号int int8 int16 int32 int64 无符号: uint uint8 uint16 uint32 uint64
  • 小数:float32 flat63
  • 字符串: string

1.2 转换过程中可能得错误

基本数据类型到字符串表示的转换,不会出错,但字符表示到基本类型的转换可能会有以下错误

  1. 超出目标类型的表示范围
package main

import (
	"fmt"
	"strconv"
)

func main() {
	numStr := "400"
	// 400 数字值已经超出int8(-128, 127)类型表示的范围
	num, err := strconv.ParseInt(numStr, 10, 8)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("conv result:", num)
}

// 输出:strconv.ParseInt: parsing "400": value out of range

  1. 不符合目标类型语法
package main

import (
	"fmt"
	"strconv"
)

func main() {
	numStr := "xx"
	// xx字符串值无法表示为对应的整数值
	num, err := strconv.ParseInt(numStr, 10, 8)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("conv result:", num)
}

// 输出:strconv.ParseInt: parsing "400": value out of range

2. 转换

  • 字符串与带引号之间转化
package main

import (
	"fmt"
	"strconv"
)

func main() {
	name := "dream_fish n"
	// 添加上引号
	fmt.Println("result:", strconv.Quote(name))

	// 去除引号
	school := `"University"`
	school_, err := strconv.Unquote(school)
	if err != nil {
		fmt.Println("err:", err)
		return
	}
	fmt.Println("result:", school_)
}

  • 字符串与布尔类型之间的转换

字符串转bool类型

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 包含所有可以转bool类型的值
	boolStringValues := []string{"1", "0", "t", "f", "true", "false", "True", "False"}

	// 进行转换
	for _, b := range boolStringValues {
		result, err := strconv.ParseBool(b)
		if err != nil {
			fmt.Printf("parse value: %s err:%s\n", b, err)
			continue
		}
		fmt.Printf("parse value: %s err:%s\n", b, result)
	}
	
	
}

bool类型转字符串

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 包含布尔类型的值
	boolValues := []bool{false, true}

	// 进行转换
	for _, b := range boolValues {
		result := strconv.Quote(strconv.FormatBool(b))
		fmt.Printf("format value: %t err:%s\n", b, result)
	}
}

  • 数值与字符串之间的转换

字符串转数值

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 转换为 int8类型
	int8String := "122"
	// 第一个参数是需要转换的字符串,第二个参数是int类型的进制,第三个参数是bit位数
	intNum, err := strconv.ParseInt(int8String, 10, 8)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("int8 num:", intNum)

	// 字符串正整数
	uintNum, err := strconv.ParseUint(int8String, 10, 8)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("uint8 num:", uintNum)

	// 字符串转浮点数
	floatNumStr := "67.9"
	floatNum, err := strconv.ParseFloat(floatNumStr, 64)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("float64 num:", floatNum)
}

数值转字符串

  • strconv包的Format系列方式
package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 整肃转字符串
	intNum := int64(8)
	fmt.Printf("%s\n", strconv.FormatInt(intNum, 10))

	// 浮点数转字符串
	result := strconv.FormatFloat(88.9, 'f', 2, 64)
	fmt.Println("float to str:", result)

	// bool类型转字符串
	fmt.Println("bool to str:", strconv.FormatBool(true))

	// 无符号整肃
	fmt.Println("uint to str", strconv.FormatUint(111, 10))
}

  • fmtSprint系列方式
package main

import (
	"fmt"
)

func main() {
	// 整肃转字符串
	intValue := int64(8)
	boolValue := true
	floatValue := 44.2
	uintValue := 33

	result := fmt.Sprintf("int: %d, bool: %t, float: %f, unit: %d", intValue, boolValue, floatValue, uintValue)
	fmt.Printf(result)
}
  • strconv包的AtoiItoa方法,其实是 ParseInt(s, 10, 0) FormatInt(i, 10)的简写
package main

import (
	"fmt"
	"strconv"
)

func main() {
	// int类型值转换为字符串
	result := strconv.Itoa(100)
	fmt.Println(result)

	// 字符串值换换为int类型的值
	intString := "200"
	intValue, err := strconv.Atoi(intString)
	if err != nil {
		panic(err)
	}
	fmt.Println(intValue)
}

3. Append系方法

添加转成基本类型转换成字符串表示的

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 基础数据类型
	intValue := int64(100)
	boolValue := true
	floatValue := 5.4

	buf := []byte("result:")
	resultValue := strconv.AppendFloat(buf, floatValue, 'f', 2, 64)
	fmt.Println(string(resultValue))

	resultValue = strconv.AppendInt(buf, intValue, 10)
	fmt.Println(string(resultValue))

	resultValue = strconv.AppendBool(buf, boolValue)
	fmt.Println(string(resultValue))
}

4. 总结

  • Parse系列方法,将字符串表示尝试转换为基础类型,Formation系列方法将基本类型转换为字符串表示,Append方法是一个将基本类型的字符串表示添加到字节切片的快捷方式

标签:Println,err,strconv,fmt,数据类型,字符串,Go,main
From: https://www.cnblogs.com/2bjiujiu/p/17992258

相关文章

  • Golang并发控制方式有几种?
    Go语言中的goroutine是一种轻量级的线程,其优点在于占用资源少、切换成本低,能够高效地实现并发操作。但如何对这些并发的goroutine进行控制呢?一提到并发控制,大家最先想到到的是锁。Go中同样提供了锁的相关机制,包括互斥锁sync.Mutex和读写锁sync.RWMutex;除此之外Go还提供了原子操作......
  • 利用yolov模型和django实现网页摄像头调用进行实时预测
    前端:<imgid="video"width="640"height="480"ref="video"></img>调用方法:startCamera(){varvideo1=document.getElementById("video");video1.src="http://localhost:8080/api/webcam/"}......
  • 2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币, 第i堆金币
    2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币,第i堆金币的总重量和总价值分别是m[i]、v[i],阿里巴巴有一个承重量为T的背包,但并不一定有办法将全部的金币都装进去,他想装走尽可能多价值的金币,所有金币都可以随意分割,分割完的金币重量价值比(也就是单位......
  • 字符串小结
    1.kmp和AC自动机AC自动机可以理解为多个串之间的kmp,具体还是非常简单。首先建出trie树,接着你要做的就是将一段后缀连向与之相同的前缀,这样就构成了failtree。具体应用:1.求多个字符串分别在模式串出现的次数,在failtree上解决即可。2.做动态转移方程。2.SA重点在后......
  • Java-05字符串
    tip:[start]字符串是计算机与人类沟通的重要手段。——闫学灿tip:[end]字符与整数的联系——ASCII码每个常用字符都对应一个-128~127的数字,二者之间可以相互转化。注意:目前负数没有与之对应的字符。常用ASCII值:'A'-'Z'是65~90'a'-'z'是97-122'0'-'9'是......
  • 文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
    一、介绍文本分类系统,使用Python作为主要开发语言,通过选取的中文文本数据集("体育类","财经类","房产类","家居类","教育类","科技类","时尚类","时政类","游戏类","娱乐类"),基于TensorFlow搭建CNN卷积神经网络算法模型,并进行多轮迭代训练最后得到一个识......
  • 跳转语句:包括break、continue和goto语句的作用和注意事项。
    跳转语句是一种在程序中改变代码执行顺序的语句。常见的跳转语句包括break、continue和goto语句。本文将为你介绍它们的作用和注意事项。break语句break语句用于在循环语句中提前结束循环,跳出循环体。它只能用于for循环、while循环和do-while循环中,不能单独使用。当break语句被执行......
  • 跳转语句:包括break、continue和goto语句的作用和注意事项。
    跳转语句是一种在程序中改变代码执行顺序的语句。常见的跳转语句包括break、continue和goto语句。本文将为你介绍它们的作用和注意事项。break语句break语句用于在循环语句中提前结束循环,跳出循环体。它只能用于for循环、while循环和do-while循环中,不能单独使用。当break语句被执行......
  • P4342 [IOI1998] Polygon
    原题链接题解最近做的题目有点多,感觉没什么好讲的,某个最大值一定是由连续区间上的节点操作后得来的\(Code\)#include<bits/stdc++.h>usingnamespacestd;intf[105][105][2];intmain(){memset(f,-0x3f3f3f,sizeoff);intn;cin>>n;charop[105];......
  • python第三节:Str字符串类型(9)
    str.swapcase()返回原字符串的副本,其中大写字符转换为小写,小写转换为大写。注意:s.swapcase().swapcase()==s 并不一定为真值。例子:arg2='spaciousworldUKUS'arg3='你好spaciousworldUKUS'arg4='你好#¥56helloWORLd'print(arg2.swapcase())print(arg3.swap......