Go 基本类型
整形
标准整形
标准整形是按长度进行分类的,其中uint8为byte型,int16为C语言中的short型,int64为C语言中的long类型。
| 类型 | 描述 |
|---|---|
| uint8 | 无符号 8位整型 (0 到 255) |
| uint16 | 无符号 16位整型 (0 到 65535) |
| uint32 | 无符号 32位整型 (0 到 4294967295) |
| uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
| int8 | 有符号 8位整型 (-128 到 127) |
| int16 | 有符号 16位整型 (-32768 到 32767) |
| int32 | 有符号 32位整型 (-2147483648 到 2147483647) |
| int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
动态整形
| 类型 | 描述 |
|---|---|
| uint | 32位操作系统上就是uint32,64位操作系统上就是uint64 |
| int | 32位操作系统上就是int32,64位操作系统上就是int64 |
| uintptr | 无符号整型,用于存放一个指针 |
动态整形的意思即是再不同的平台上,有不同的差异。
注意事项:len()函数可以根据不同平台动态获取动态整形的长度。但是在涉及到二进制传输、读写文件的结构描述时,不要使用int和uint
进制写法
在Go1.13版本后,可以根据字面量来书写不同的进制。
你甚至可以使用_来做分割,如v:=123_456表示v的值为123456。
需要注意的一点是,Go语言中目前不支持二进制的字面量写法。
借助fmt函数将一个整数用于不同的进制显示。
package main
import "fmt"
func main() {
// 十进制定义
var a int = 10
fmt.Printf("%d \n", a) // 显示十进制
fmt.Printf("%b \n", a) // 显示二进制
fmt.Printf("%o \n", a) // 显示八进制
fmt.Printf("%0x \n", a) // 显示十六进制
// 八进制定义
var b int = 077
fmt.Printf("%d \n", b) // 显示十进制
// 十六进制定义
var c int = 0xff
fmt.Printf("%d \n", c) // 显示十进制
}
浮点型
Go语言中有两种浮点型,float32与float64。
float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。 float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。
在打印浮点数时,使用fmt配合%f。
package main
import "fmt"
func main() {
// float32
var a float32 = 9.999
// float64
var b float64 = 8.888
fmt.Println(a)
fmt.Printf("类型:%T-数值:%f \n", a, a)
fmt.Printf("类型:%T-数值:%f \n", b, b)
// 9.999
// 类型:float32-数值:9.999000
// 类型:float64-数值:8.888000
}
复数
复数用的比较少。有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)
布尔类型
Go语言中的bool类型有true和false。
值得一提的是在Go语言中布尔值有以下的特性:
1.布尔类型的变量默认值都是false
2.Go语言中布尔值与整形没有任何关系
3.布尔值无法参与运算,也不能进行转换
字符串
Go语言中的字符串是双引号进行声明,而多行的原生字符串可以使用``来进行声明。
至于单引号,则用来表示单个字符。
另外,Go语言中的字符串都是使用UTF-8编码格式。
基本定义
以下示例中定义了一个字符串。
package main
import "fmt"
func main() {
var str string = "HELLO,WORLD!"
fmt.Printf("类型:%T \n值: %v \n", str, str)
// 类型:string
// 值: HELLO,WORLD!
}
转义符
可以使用\反斜杠来进行特殊字符的转义。
| 转义符 | 含义 |
|---|---|
| \r | 回车符(返回行首) |
| \n | 换行符(直接跳到下一行的同列位置) |
| \t | 制表符 |
| \\ | 单引号 |
| \" | 双引号 |
| \\ | 反斜杠 |
原始字符
使用``来定义多行,并且它还具有原始字符串的功能,即特殊字符在原始字符串中没有意义。
package main
import "fmt"
func main() {
str := `
望庐山瀑布
李白
日照香炉生紫烟,
遥看瀑布挂前川。
飞流直下三千尺,
疑似银河落九天。
`
fmt.Println(str)
}
常用方法
以下是一些字符串的常用方法。注意,需要导入strings包。
| 方法 | 描述 |
|---|---|
| len() | 求长度,byte长度 |
| + | 字符串拼接 |
| fmt.Sprint() | 字符串拼接 |
| strings.Contains() | 判断是否包含子串 |
| strings.HasPrefix() | 是否是以特定前缀开始 |
| strings.HasSuffx() | 是否是以特定后缀结束 |
| strings.Index() | 子串出现位置,从左至右检索 |
| strings.LastIndex() | 子串出现位置,从右至左检索 |
| strings.Split() | 字符串按照指定字符分割,返回数组 |
| strings.Join(str,sep string) | 数组拼接成字符串 |
package main
import (
"fmt"
"strings"
)
func main() {
str := "this is string"
fmt.Println(len(str)) // 14
fmt.Println(str + "拼接后的内容") // 返回新字符串 this is string拼接后的内容
fmt.Println(fmt.Sprint(str, "拼接后的内容")) // 返回新字符串 this is string拼接后的内容
fmt.Println(strings.Contains(str, "this")) // true
fmt.Println(strings.HasPrefix(str, "this")) // true
fmt.Println(strings.HasSuffix(str, "string")) // true
fmt.Println(strings.Index(str,"is")) // 2
fmt.Println(strings.LastIndex(str,"str")) // 8
newStr := strings.Split(str,` `)
fmt.Println(newStr) // [this is string]
fmt.Println(strings.Join(newStr,` `)) // this is string
}
byte
当单个字符为英文时,是一个byte类型。一个byte标识八位二进制数。
值得注意的是,byte等同于uint8
package main
import (
"fmt"
)
func main() {
str := "this is string"
fmt.Printf("类型:%T \n值:%v ", str[0], str[0])
// 类型:uint8
// 值:116
}
rune
当单个字符为中文,或者其他文字如韩文时,该字符为rune类型。
rune等同于uint32。
如下示例,如果按照普通的len()进行遍历,则会遍历出byte类型,而一个中文字符通常是3个byte,所以需要用rune来进行显示。否则就会出现第一次遍历出的结果。
package main
import (
"fmt"
)
func main() {
str := "这是字符串"
for i := 0; i < len(str); i++ { //byte
fmt.Printf("%v(%c) ", str[i], str[i])
}
for _, r := range str { // rune
fmt.Printf("%v(%c)", r, r)
}
// 232(è) 191(¿) 153() 230(æ) 152() 175(¯) 229(å) 173() 151() 231(ç) 172(¬) 166(¦) 228(ä) 184(¸) 178(²)
// 36825(这)26159(是)23383(字)31526(符)20018(串)
fmt.Print(len(str))
// 15 按照byte进行遍历
}
字符转换
将一个字符串修改为byte类型,将一个字符串修改为rune类型:
注意:不管是byte还是rune类型,其实都是由数组构成
package main
import (
"fmt"
)
func main() {
strChinese := "这是字符串"
strEngilsh := "this is string"
byteStr := []byte(strEngilsh)
runeStr := []rune(strChinese)
fmt.Println(byteStr) // [116 104 105 115 32 105 115 32 115 116 114 105 110 103]
fmt.Println(runeStr) // [36825 26159 23383 31526 20018]
}
字符修改
要修改字符串,必须要将其转换为byte类型或rune类型。
并且在修改时用``单引号进行包裹,改完后再将他们转换为字符串。
如下示例:
package main
import (
"fmt"
)
func main() {
strChinese := "这是字符串"
runeStr := []rune(strChinese)
runeStr[0] = '它' // 注意,用单引号进行包裹
newString := string(runeStr)
fmt.Println(newString) // 它是字符串
}
类型转换
Go语言中类型转换用的比较少,它要原本两个不同类型支持互转才行,如浮点型转整型等。
如下示例,将整形转换为浮点数:
package main
import (
"fmt"
)
func main() {
var (
intNum int16
floatNum float64
)
intNum = 10
floatNum = float64(intNum)
fmt.Printf("类型:%T \n值:%v", floatNum, floatNum)
// 类型:float64
// 值:10
}
Go 基本类型的更多相关文章
- 【.net 深呼吸】细说CodeDom(5):类型成员
前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...
- 【.net 深呼吸】细说CodeDom(4):类型定义
上一篇文章中说了命名空间,你猜猜接下来该说啥.是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了. CLR的类型通常有这么几种:类.接口.结构.枚举.委托.是这么 ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- [C#] async 的三大返回类型
async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...
- C# - 值类型、引用类型&走出误区,容易错误的说法
1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
随机推荐
- 查询Linux CPU架构
一.背景 Ubuntu上需要安装测试个软件wkhtmltopdf,但是下载时,需要知道系统架构,故做记录 二.查看linux架构 dpkg 命令 dpkg 的命令可用于查看 Debian/ Ubunt ...
- 使用 Python破解大众点评字体加密(SVG反扒)
前言 大众点评拥有大量高质量评论信息.种草信息,同时也有非常严格的反扒机制. 今天我们一起使用 Python破解大众点评字体加密,获取极具商业价值的信息. 本文知识点: requests 的使用 xp ...
- 深入学习redis 的线程模型
一.redis 的线程模型 redis 内部使用文件事件处理器 file event handler,它是单线程的,所以redis才叫做单线程模型.它采用IO多路复用机制同时监听多个 socket,将 ...
- Excel-时间函数将时间换成小时
问题场景 用考勤打卡时间算员工饱和度. 场景 计算员工实际工作时长,需要算出打卡时长再减去午休时长1.5小时. 目标 算出实际工作时长. 解决方案 利用单元格格式设置进行简单计算. 第一步:在F2单元 ...
- C++STL complex吃书使用指南
说在前面: complex即为复数 使用c++自带的complex类型,首先要有<complex>头文件,还要使用std命名空间 声明方式: complex <T> a: 声 ...
- 前端通过jqplot绘制折线图
首先需要下载jqplot需要的js与css文件,我已近打包好了,需要的可以下载 接下来导入其中关键的js与css如下, <link href="css/jquery.jqplot.mi ...
- Spring Cloud:Consul基础知识
一.基本概念 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发. 它提供微服务系统中的服务治理.配置中心.控制总线等功能. 服务发现:提供HTTP和DNS两种发 ...
- [BUUOJ记录] [GXYCTF2019]Ping Ping Ping
主要考察RCE的防护绕过,感觉考的还是比较全的 先构造Payload: ?ip=127.0.0.1;ls 看到目录下有两个文件,fuzz一下发现过滤了 空格 / + * ? { } ( ) [ ]等符 ...
- 非IT行业大企程序员讲述MIS系统开发案例
雪莉叹了一口气,调整了一下被汗水濡湿的刘海,然后向后靠在办公椅中,伸手在电脑键盘上输入了一些内容, 最后拿起印刷着房地产广告的扇子,边扇风边等待着. 她的工位在办公室的东侧角落,侧靠着窗.此时 ...
- Codeforces Round #668 (Div. 2)A-C题解
A. Permutation Forgery 题目:http://codeforces.com/contest/1405/problem/A 题解:这道题初看有点吓人,一开始居然想到要用全排序,没错我 ...