一、go语言浮点数表示
go语言浮点数类型有两个,即float32和float64。存储这两个类型的值的空间分别需要4个字节和8个字节。
浮点数类型的值一般由整数部分、小数点“.”和小数部分组成。其中,整数部分和小数部分均由10进制表示法表示。不过还有另一种表示方法。那就是在其中加入指数部分。指数部分由“E”或“e”以及一个带正负号的10进制数组成。比如,3.7E-2表示浮点数0.037。又比如,3.7E+1表示浮点数37。
有时候,浮点数类型值的表示也可以被简化。比如,37.0可以被简化为37。又比如,0.037可以被简化为.037。
有一点需要注意,在Go语言里,浮点数的相关部分只能由10进制表示法表示,而不能由8进制表示法或16进制表示法表示。比如,03.7表示的一定是浮点数3.7。
代码实例 go_float.go:
package main
import "fmt"
func main() {
// 可以在变量声明并赋值的语句中,省略变量的类型部分。
var num1 = 5.89E-4
var num2 = 3.78E+4
// 这里用到了字符串格式化函数。其中,%E用于以带指数部分的表示法显示浮点数类型值,
//%f用于以通常的方法显示浮点数类型值。
fmt.Printf("浮点数 %E 表示的是:%f \n", num1, num1)
fmt.Printf("浮点数 %E 表示的是:%f ", num2, num2)
}
二、go语言复数表示
go语言复数类型同样有两个,即complex64和complex128。存储这两个类型的值的空间分别需要8个字节和16个字节。
实际上,complex64类型的值会由两个float32类型的值分别表示复数的实数部分和虚数部分。而complex128类型的值会由两个float64类型的值分别表示复数的实数部分和虚数部分。
复数类型的值一般由浮点数表示的实数部分、加号“+”、浮点数表示的虚数部分,以及小写字母“i”组成。比如,3.7E+1 + 5.98E-2i。
正因为复数类型的值由两个浮点数类型值组成,所以其表示法的规则自然需遵从浮点数类型的值表示法的相关规则。
实例代码 go_fushu.go:
package main
import "fmt"
func main() {
var num1 = 3.7E+4 + 3.14E-2i
var num2 = 6.18E-2 + 3.14E-2i
fmt.Printf("浮点数 %E 表示的是:%f\n", num1, num1)
fmt.Printf("浮点数 %E 表示的是:%f", num2, num2)
}
三、go语言的byte和rune
byte与rune类型有一个共性,即:它们都属于别名类型。byte是uint8的别名类型,而rune则是int32的别名类型。
byte类型的值需用8个比特位表示,其表示法与uint8类型无异。
一个rune类型的值即可表示一个Unicode字符。
Unicode是一个可以表示世界范围内的绝大部分字符的编码规范。关于它的详细信息,大家可以参看其官网(http://unicode.org/)上的文档,或在Google上搜索。
用于代表Unicode字符的编码值也被称为Unicode代码点。一个Unicode代码点通常由“U+”和一个以十六进制表示法表示的整数表示。例如,英文字母“A”的Unicode代码点为“U+0041”。
rune类型的值需要由单引号“'”包裹。例如,'A'或'郝'。这种表示方法一目了然。不过,我们还可以用另外几种形式表示rune类型值。
在rune类型值的表示中支持几种特殊的字符序列,即:转义符。它们由“\”和一个单个英文字符组成。
实例代码 go_rune.go:
package main
import "fmt"
func main() {
//声明一个rune类型变量并赋值
var char1 rune = '赞'
var char2 rune = 'A'
//字符串格式化函数,%c用于显示rune类型值代表的字符
fmt.Printf("字符 '%c' 的Unicode代码点是 %s\n", char1, ("U+8D5E"))
fmt.Printf("字符 '%c' 的Unicode代码点是 %s\n", char2, ("U+0041"))
}
四、go语言字符串类型
一个字符串类型的值可以代表一个字符序列。这些字符必须是被Unicode编码规范支持的。从表象上来说是字符序列,但是在底层,一个字符串值却是由若干个字节来表现和存储的。
一个字符串(也可以说字符序列)会被Go语言用Unicode编码规范中的UTF-8编码格式编码为字节数组。
在一个字符串值或者一个字符串类型的变量之上应用Go语言的内置函数len将会得到代表它的那个字节数组的长度。这可能与我们看到的表象是不同的。
字符串的表示法有两种,即:原生表示法和解释型表示法。
若用原生表示法,需用反引号“`”把字符序列包裹起来。
若用解释型表示法,则需用双引号“"”包裹字符序列。
二者的区别是,前者表示的值是所见即所得的(除了回车符)。在那对反引号之间的内容就是该字符串值本身。而后者所表示的值中的转义符会起作用并在程序编译期间被转义。所以,如此表示的字符串值的实际值可能会与我们看到的表象不相同。
注意,字符串值是不可变的。一旦创建了一个字符串类型的值,就不可能再对它本身做任何修改。
实例代码 go_string.go:
package main
import (
"fmt"
)
func main() {
// 声明一个string类型变量并赋值
var str1 string = "\\\""
var str2 string = "霜花似雪"
// 这里用到了字符串格式化函数。其中,%q用于显示字符串值的表象值并用双引号包裹。
fmt.Printf("用解释型字符串表示法表示的 %q 所代表的是 %s。\n", str1, `str1`)
fmt.Printf("字符串str2的值为:%s\n", str2)
fmt.Printf("字符串str2的长度为:%d\n", len(str2))
fmt.Printf("字符串拼接后:%s", str2+str1)
}
以上实例代码的运行效果如图:
go语言字符串相关实例代码:
go_string.go
package main
import (
"fmt"
"strings"
)
func main() {
s := "hello world"
//判断字符串s是否在字符串hello中存在
fmt.Println(strings.Contains(s, "hello"), strings.Contains(s, "?"))
//输出字符o在字符串中的索引
fmt.Println(strings.Index(s, "o"))
ss := "1#2#3#456"
//切割字符串
//采用Split函数根据#作为分隔符,分割字符串
splitedStr := strings.Split(ss, "#")
fmt.Println(splitedStr)
//合并字符串
fmt.Println(strings.Join(splitedStr, "#"))
//判断字符串s中是否包含he开头的前缀
fmt.Println(strings.HasPrefix(s, "he"))
////判断字符串s中是否包含ld结尾的后缀
fmt.Println(strings.HasSuffix(s, "ld"))
}
go_string1.go
package main
import (
"fmt"
"strconv"
)
func main() {
//go语言中整型与字符串相互转换API
//输入整型数据输出字符串
fmt.Println(strconv.Itoa(10))
//输入字符串转化为整型
fmt.Println(strconv.Atoi("711"))
//字符串解析
//解析为Bool类型
fmt.Println(strconv.ParseBool("false")) //0,f,F,false,FALSE,False
fmt.Println(strconv.ParseBool("True")) //1,t,T,true,TRUE,True
//解析为float类型,32是位数,是精度
fmt.Println(strconv.ParseFloat("3.14", 32))
//格式化
fmt.Println(strconv.FormatBool(true))
//FormatInt(123, 10),10表示是10进制,这个函数可以实现进制之间的转化
fmt.Println(strconv.FormatInt(123, 10)) //十进制
fmt.Println(strconv.FormatInt(123, 2)) //二进制
fmt.Println(strconv.FormatInt(20, 16)) //十六进制
}
以上两个实例代码的运行效果如图:
今天的分享到此结束,请诸君多多支持!