Adminxe's Blog | 低调求发展 - 潜心习安全 ,技术永无止境 | 谢谢您对本站的支持，有什么问题或者建议请及时联系： # GO语言学习–基本数据类型

544℃

Go语言中有丰富的数据类型，除了基本的整型、浮点型、布尔型、字符串外，还有数组、切片、结构体、函数、map、通道（channel）等。Go 语言的基本类型和其他语言大同小异。

## 整型

### 数字字面量语法（Number literals syntax）

`````` package main

import "fmt"

//整型

func main() {
var i1 = 101
//十进制
fmt.Printf("%d\n", i1)
fmt.Printf("%o\n", i1) //把十进制数转换成八进制
fmt.Printf("%x\n", i1) //把十进制数转换成十六进制
fmt.Printf("%b\n", i1) //把十进制数转换成二进制
// 八进制
i2 := 077
fmt.Printf("%d\n", i2)
//十六进制
i3 := 0x1234567
fmt.Printf("%d\n", i3)
//查看变量的类型
fmt.Printf("%T\n", i3)

//声明int8类型的变量
i4 := int8(9)
fmt.Printf("%T\n", i4)
}``````

## 浮点型

`````` package main

import "fmt"

//浮点型

func mian() {
// math.MaxFloat32 // float32
f1 := 1.23456
fmt.Printf("%T\n", f1) //默认go语言中的小数都是float64类型
f2 := float32(1.23456)
fmt.Printf("%T\n", f2) //显示声明float32类型
//  f1 = f2  //floot32类型的值不能直接赋值给float64类型的变量
}``````

## 复数

complex64和complex128

`````` var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)``````

## 布尔值

Go语言中以bool类型进行声明布尔型数据，布尔型数据只有true（真）和false（假）两个值。

布尔类型变量的默认值为false。

Go 语言中不允许将整型强制转换为布尔型.

`````` package main

import "fmt"

//布尔值
func mian() {
b1 := true
var b2 bool
fmt.Printf("%T/n", b1)
fmt.Printf("%T value:%v\n", b2, b2)
}``````

## 字符串

Go语言中的字符串以原生数据类型出现，使用字符串就像使用其他原生数据类型（int、bool、float32、float64 等）一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(“)中的内容，可以在Go语言的源码中直接添加非ASCII码字符，例如：

`````` //字符串
s := "Hello 你好"
//单独的字母、汉字、符号表示一个字符
c1 := 'h'
c2 := '1'
c3 := '你'
//字节： 1字节=8Bit（8个二进制位）``````

Go语言中单引号包裹的是字符！！

### 字符串转义符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等，如下表所示。

`````` package main

import "fmt"

func main() {
// \ 本来是具有特殊的含义的，我应该告诉程序我写的就是一个单纯的\
fmt.Println(path1)
fmt.Println(path2)

}``````

### 多行字符串

Go语言中要定义一个多行字符串时，就必须使用`反引号”`”`字符

``````  // 多行的字符串
s2 := `
你说林深见鹿
亦可自度
後来清晨见雾
你未留住
`
fmt.Println(s2)

fmt.Println(s3)``````

### 字符串的常用操作

#### 求长度

``````     //求长度
fmt.Println(len(s3))
``````

#### 拼接字符串

``````     //字符串拼接
name := "MoCo"
world := "yyds"
ss := name + world
fmt.Println(ss)
ss1 := fmt.Sprintf("%s%s", name, world)
fmt.Println(ss1)

fmt.Printf("%s%s", name, world)``````

#### 分割

``````      //分割
ret := strings.Split(s3, "\\")
fmt.Println(ret)``````

#### 判断是否包含

``````      //包含
fmt.Println(strings.Contains(ss, "mocc"))
fmt.Println(strings.Contains(ss, "MoCo"))``````

#### 前缀/后缀判断

``````      //前缀
fmt.Println(strings.HasPrefix(ss, "MoCo"))
//后缀
fmt.Println(strings.HasSuffix(ss, "MoCo"))``````

#### 子串出现的位置

``````     //字串出现的位置
s4 := "abcdeb"
fmt.Println(strings.Index(s4, "c"))     //C在这个字符串里出现的位置
fmt.Println(strings.LastIndex(s4, "b")) //b在这个字符串里最后出现的位置``````

#### join操作

`````` //join拼接
fmt.Println(strings.Join(ret, "+"))``````

### byte和rune类型

`````` var a = '中'
var b ='x'``````

Go 语言的字符有以下两种：

1. `uint8`类型，或者叫 byte 型，代表了`ASCII``码`的一个字符。
2. `rune`类型，代表一个 `UTF-8``字符`

Go 使用了特殊的 rune 类型来处理 Unicode，让基于 Unicode 的文本处理更为方便，也可以使用 byte 型进行默认字符串处理，性能和扩展性都有照顾。

`````` package main

import "fmt"

// 遍历字符串

func main() {
s := "hello 你好"
for i := 0; i < len(s); i++ { //byte
fmt.Printf("%v(%c) ", s[i], s[i])
}
fmt.Println()
for _, r := range s { //rune
fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()
}``````

### 修改字符串

`````` s5 := "白萝卜"
s6 := []rune(s5) // 把字符串强制转换成了一个rune切片
s6 = '红'
fmt.Println(string(s6)) //  把rune切片强制转换成字符串

c1 := "红"
c2 := '红' // rune(int32)
fmt.Printf("c1:%T c2:%T\n", c1, c2)
c3 := "H"       //string
c4 := 'H'       //int32
c5 := byte('H') // byte(uint8)
fmt.Printf("c3:%T c4:%T\n", c3, c4)
fmt.Printf("%d\n", c4)
fmt.Printf("c5:%T\n", c5)``````

### 字符串练习笔记代码（除byte和rune类型）

``````package main

import (
"fmt"
"strings"
)

func main() {
// \ 本来是具有特殊的含义的，我应该告诉程序我写的就是一个单纯的\
fmt.Println(path1)
fmt.Println(path2)

// 多行的字符串
s2 := `
你说林深见鹿
亦可自度
後来清晨见雾
你未留住
`
fmt.Println(s2)

fmt.Println(s3)

//字符串相关操作

//求长度
fmt.Println(len(s3))

//字符串拼接
name := "MoCo"
world := "yyds"
ss := name + world
fmt.Println(ss)
ss1 := fmt.Sprintf("%s%s", name, world)
fmt.Println(ss1)

fmt.Printf("%s%s", name, world)

//分割
ret := strings.Split(s3, "\\")
fmt.Println(ret)

//包含
fmt.Println(strings.Contains(ss, "mocc"))
fmt.Println(strings.Contains(ss, "MoCo"))
//前缀
fmt.Println(strings.HasPrefix(ss, "MoCo"))
//后缀
fmt.Println(strings.HasSuffix(ss, "MoCo"))
//字串出现的位置
s4 := "abcdeb"
fmt.Println(strings.Index(s4, "c"))     //C在这个字符串里出现的位置
fmt.Println(strings.LastIndex(s4, "b")) //b在这个字符串里最后出现的位置

//join拼接
fmt.Println(strings.Join(ret, "+"))

//字符串修改
s5 := "白萝卜"
s6 := []rune(s5) // 把字符串强制转换成了一个rune切片
s6 = '红'
fmt.Println(string(s6)) //  把rune切片强制转换成字符串

c1 := "红"
c2 := '红' // rune(int32)
fmt.Printf("c1:%T c2:%T\n", c1, c2)
c3 := "H"       //string
c4 := 'H'       //int32
c5 := byte('H') // byte(uint8)
fmt.Printf("c3:%T c4:%T\n", c3, c4)
fmt.Printf("%d\n", c4)
fmt.Printf("c5:%T\n", c5)

//类型转换
//只有整型和浮点型可以相互转换，字符串和切片能互相转换
n1 := 10 //int
var f float64
f = float64(n1)
fmt.Println(f)
fmt.Printf("%T\n", f)
}``````

### byte和rune类型练习笔记代码

``````package main

import "fmt"

// 遍历字符串

func main() {
s := "hello 你好"
for i := 0; i < len(s); i++ { //byte
fmt.Printf("%v(%c) ", s[i], s[i])
}
fmt.Println()
for _, r := range s { //rune
fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()
}``````

## 类型转换

Go语言中只有强制类型转换，没有隐式类型转换。该语法只能在两个类型之间

``````     //类型转换
//只有整型和浮点型可以相互转换，字符串和切片能互相转换
n1 := 10 //int
var f float64
f = float64(n1)
fmt.Println(f)
fmt.Printf("%T\n", f)``````

## 参考链接

https://www.liwenzhou.com/posts/Go/02_datatype/
{"ft_lang_label":"__label__zh","ft_lang_prob":0.568552,"math_prob":0.9864825,"size":6305,"snap":"2023-40-2023-50","text_gpt3_token_len":3346,"char_repetition_ratio":0.18425646,"word_repetition_ratio":0.407932,"special_character_ratio":0.37985724,"punctuation_ratio":0.20316403,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.9541078,"pos_list":[0,1,2],"im_url_duplicate_count":[null,null,null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2023-12-10T11:03:56Z\",\"WARC-Record-ID\":\"<urn:uuid:de6dff65-6d45-410f-8dde-54092234d22f>\",\"Content-Length\":\"90256\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:12363d6c-0d69-40aa-90dc-463cf0b95ea3>\",\"WARC-Concurrent-To\":\"<urn:uuid:30305b4b-f02d-4f60-b8da-b330193d5d92>\",\"WARC-IP-Address\":\"101.200.85.113\",\"WARC-Target-URI\":\"https://www.adminxe.com/3416.html\",\"WARC-Payload-Digest\":\"sha1:A4USBO32M7JVIZYNF3GOH2WGFSIBV5O4\",\"WARC-Block-Digest\":\"sha1:U2LVLWF5MJQSRKRND5AEJNQGW32FQNDD\",\"WARC-Identified-Payload-Type\":\"text/html\",\"warc_filename\":\"/cc_download/warc_2023/CC-MAIN-2023-50/CC-MAIN-2023-50_segments_1700679101779.95_warc_CC-MAIN-20231210092457-20231210122457-00176.warc.gz\"}"}