GO数据类型之字符与字符串与布尔类型与数据类型转换

目录

字符类型

基本介绍

定义使用

布尔类型

基本介绍

定义使用

字符串

基本介绍

定义使用 

常用方法


字符类型

基本介绍

字符一般由以下两种类型

  • 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。
  • 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。

定义使用

1.字符是用单引号('')括起来的单个字符

package main

import "fmt"

func main() {
	var c1 byte = 'a'
	fmt.Println(c1)         //直接输出byte值:ascii表中对应的数值:97
	fmt.Printf("c1=%c\n", c1) //格式化输出对应字符:c1=a

   //如果我们保存的字符在 ASCII 表的,比如[0-1, a-z,A-Z..]直接可以保存到byte,如果我们保 
      存的字符对应码值大于 255,这时我们可以考虑使用 int 类型保存
	var c2 int = '中'
	fmt.Println(c2) // 20013

	var c3 byte = '9'
	fmt.Println(c3) // 57
}
2.在Go 中,字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值可进行加减乘除等运算。
package main

import "fmt"

func main() {
	var c1 byte = 'a'
	fmt.Println(c1) //直接输出byte值:ascii表中对应的数值:97

	var c2 byte = 'a' + 1
	fmt.Println(c2) //直接输出byte值:ascii表中对应的数值+1:98

}
3.Go 中允许使用转义字符 '\’来将其后的字符转变为特殊字符型常量。
var c3 char = ‘\n’ // '\n'表示换行符

布尔类型

基本介绍

1) 布尔类型也叫 bool 类型, bool 类型数据只允许取值 true false
2) bool 类型占 1 个字节。
3) bool 类型适于 逻辑运算 ,一般用于程序流程控制 [ 注:这个后面会详细介绍 ]
    if 条件控制语句
    for 循环控制语句

定义使用

  1. 布尔类型变量的默认值为false
  2. Go 语言中不允许将整型强制转换为布尔型.
  3. 布尔型无法参与数值运算,也无法与其他类型进行转换。
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var c1  = false
	fmt.Println(c1)

	var c2  = true
	fmt.Println(c2)
	fmt.Println(unsafe.Sizeof(c2)) //字节大小

}

字符串

基本介绍

字符串就是一串固定长度的字符连接起来的字符序列。 Go 的字符串是由单个字节连接起来的。 Go
语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本

定义使用 

1.采用双引号和反引号定义

(1) 双引号 , 会识别转义字符
(2) 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	// 双引号转义输出
	var c1 = "姓名"
	fmt.Println(c1)
    
	// 反引号原义输出
	var c2 = `
    import (
	"fmt"
	"unsafe"
    )
	func main() {
		var c1 = "姓名"
		fmt.Println(c1)
	}
    `
	fmt.Println(c2)
	fmt.Println(unsafe.Sizeof(c2)) //字节大小

}

2.字符串一旦赋值了,字符串的值就不能修改了:在 Go 中字符串是不可变的

GO数据类型之字符与字符串与布尔类型与数据类型转换_第1张图片

常用方法

1 字符串拼接

方式1: +
 var c1 = "姓名" + "a"
 
// 拼接一个很长的字符串时,可以分行但注意 需要将+保留在上一行
 var c1 = "姓名" + "a"+
		   "b"
 fmt.Println(c1) // 姓名ab

数据类型转换

基本介绍

Golang java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换

基本语法

将值 v 转换为类型 T : var 变量名 = T(v)

T : 就是数据类型,比如 int32 int64 float32 等等
v : 就是需要转换的变量

 示例

GO数据类型之字符与字符串与布尔类型与数据类型转换_第2张图片

注意事项

1) Go 中,数据类型的转换可以是从 表示范围小-->表示范围大,也可以 范围大--->范围小
2) 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!
3) 在转换中,比如将 int64 转成 int8 -128---127】 ,编译时不会报错,只是转换的结果是
溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围.
GO数据类型之字符与字符串与布尔类型与数据类型转换_第3张图片
4)练习

GO数据类型之字符与字符串与布尔类型与数据类型转换_第4张图片改正 

GO数据类型之字符与字符串与布尔类型与数据类型转换_第5张图片

 基本数据类型和string相互转换

数据类型转string

方式1:字符串拼接

// 类似于python中字符串拼接

fmt.Sprintf(数据类型, 变量)

package main

import "fmt"

func main() {
   // 想定义空的字符串,后续字符串拼接转换用
   var str string

   //1.整型类型转string,可以是int,int8,int64 ,uint等
   var num1 int = 99
   str = fmt.Sprintf("%d", num1)
   fmt.Printf("整型转string  类型:%T, str:%q\n", str, str)

   //2.浮点型转string,可以是float32,float64
   var num2 float64 = 23.456
   str = fmt.Sprintf("%f", num2)
   fmt.Printf("float转string  类型:%T, str:%q\n", str, str)

   //3.布尔类型转string
   var num3 bool = true
   str = fmt.Sprintf("%t", num3)
   fmt.Printf("bool转string  类型:%T, str:%q\n", str, str)

   //4.字符类型转string:可以是byte,rune
   var num4 byte = 'h'
   str = fmt.Sprintf("%c", num4)
   fmt.Printf("byte转string  类型:%T, str:%q\n", num4, str)

}

方式2:strconv

中文文档

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 想定义空的字符串,后续字符串拼接转换用
	var str string

	/* 1.整型转stringfunc
	    FormatInt(i int64, base int)
		strconv.FormatInt(int64类型数据, 进制)
		返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母'a'到'z'表示大于10的数字。
	*/
	var num1  int = 99
	str = strconv.FormatInt(int64(num1), 10)
	fmt.Printf("整型转string  类型:%T, str:%q\n", str, str)
	/* 2.整型转string
		Itoa(i int) string
	    strconv.Itoa(整型数据类型)
	*/
	var a int = 1
	str = strconv.Itoa(a)
	fmt.Printf("整型转string  类型:%T, str:%q\n", str, str)
	/*
		2.其他类型转string参考文档
	*/

}

GO数据类型之字符与字符串与布尔类型与数据类型转换_第6张图片

string转基本数据类型

1. string转bool

package main

import (
	"fmt"
	"strconv"
)

func main() {

	/*
	ParseBool(str string) (value bool, err error)
	它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否则返回错误。
	 */
	var str1 = "true"
	var e error
	var num1 bool
	num1, e = strconv.ParseBool(str1)
	fmt.Printf("num1=%v e=%v",  num1, e) //num1=true e=

}

2.string转整型

package main

import (
	"fmt"
	"strconv"
)

func main() {

	/*
	func ParseInt(s string, base int, bitSize int) (i int64, err error)
	返回:字符串表示的整数值,接受正负号。
	base:指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制;
	bitSize:指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64;
	返回的err:是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange。
	 */
	var str1 = "123456"
	var e error
	var n1 int64
	n1, e = strconv.ParseInt(str1, 10, 0) //接受的变量要是int64类型的
	fmt.Printf("n1=%v e=%v\n",  n1, e) //num1=true e=

	var n2 int
	n2 = int(n1)
	fmt.Printf("n2=%v",  n2) //n2=123456

}

3. string转float

package main

import (
	"fmt"
	"strconv"
)

func main() {

	/*
	ParseFloat(s string, bitSize int) (f float64, err error)
	解析一个表示浮点数的字符串并返回其值。
	如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。
	bitSize:指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64;
	返回值err是*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。
	 */
	var str1 = "1234.56"
	var e error
	var f1 float64
	f1, e = strconv.ParseFloat(str1, 64) //接受的变量要是int64类型的
	fmt.Printf("n1=%v e=%v\n",  f1, e) //n1=1234.56 e=

}

4.其他类型参考文档

5.注意

在将String 类型转成 基本数据类型时,要确保String 类型能够转成有效的数据,比如 我们可以把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数,如果这样做,Golang 直接将其转成数据类型的默认值 即整型的默认值 0 ,其它 类型也是一样的道理. float => 0 bool => false

GO数据类型之字符与字符串与布尔类型与数据类型转换_第7张图片

你可能感兴趣的:(#,Go基础,golang)