GO 语言基本数据类型(下)

简介: GO 语言基本数据类型(下)

转义字符


看下图:

334edc4a1b714f418d6459c4a8a4c89a.png


通俗来说:

  • \b
    就是往前挪一格,掩盖挪动的那一格的数据。


ef8022ac42774ad29d220882bcd3a3bf.png

  • \n
    就是换行,这个不用多说(haha)
  • \r
    就是光标回到本行的开头,将\r后面的字符依次覆盖前面的字符。


007126d7fab54913bbe39b61477f3681.png


  • \t
    就是将\t前面的字符串补够8个位置(不够8个位置),不够的话,则从那够了的8个再往后数。

9fb29fa51bf942b1b58fbf4de97c7f88.png

  • \" , \' , \\
    这三个是为了在字符串中能够将,',\打印出来而不是与旁边的"",'',或者是转义匹配。

例如:


50f8d6318519495196e049f5cad47797.png


4.布尔类型


  • 布尔类型也叫bool类型,bool类型数据只允许取值true和false。
  • 布尔类型占1个字节。
  • 布尔类型适于逻辑运算,一般用于程序流程控制。


基本的使用:

package main
import "fmt"
func main(){
        //测试布尔类型的数值:
        var flag1 bool = true
        fmt.Println(flag1) // true
        var flag2 bool = false
        fmt.Println(flag2) // false
        var flag3 bool = 5 < 9
        fmt.Println(flag3) // true,因为5的确小于9:为真
}


5.字符串类型


  • 字符串类型用 string 来定义。
  • 字符串定义后就不能改变了(单指字符串,变量的值可以变)。
  • 字符串可以拼接。
  • 当一个字符串里面有转义的时候最好用 ``Esc下面的按键)括起来(当然转义字符也可以)。
  • 当一个字符串过长时,最好换行,而换行的时候最好将运算符放在一行的最后面,因为如果不是符号在最后面,编译器会自动在这一行的后面加上,我们看不见而已。


示例:

package main
import "fmt"
func main(){
  // 定义一个字符串
  var str1 string = "hello golang"
  fmt.Println(str1) // hello golang
  // 转义字符过多时用``括起来
  var str2 string = `package main
  import "fmt"
  func main(){
    fmt.Println("abc\"d\"efghijklm\\nopqrs\\tuvw")
    // abc"d"efghijklm\nopqrs\tuvw
  }`
  // 字符串拼接
  var str3 string = "hahaha" + "hehehe"
  str3 += "iloveyou"
  fmt.Println(str3) // hahahaheheheiloveyou
  //当一个字符串过长的时候:注意:+保留在上一行的最后
  var str4 string = "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" +
       "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+
    "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" +
    "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + 
    "abc" + "def"+ "abc" + "def"
  fmt.Println(str4)
}


6.基本数据类型的默认值


在Golang中数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值(默认值又叫零值)。


962500a537234e9094002751deb45d49.png


7.基本数据类型之间的转换


Go在不同类型的变量之间赋值时需要显式转换,并且只有显式转换(强制转换)。

语法形式:

表达式T(v)将值v转换为类型T

T : 就是数据类型

v : 就是需要转换的变量


例如:

package main
import "fmt"
func main(){
  var num1 int = 1000
  var f1 float32 = float32(num1)
  fmt.Println(f1) // 1000
  var f2 float32 = 666.66
  var num2 int = int(f2)
  fmt.Println(num2) // 66
}


但如过一个大的值强制转换为一个不能存放这个大数据的值的类型时,编译器不会报错,但运行后会造成数据的溢出(截断):

例如:

package main
import "fmt"
func main(){
  // 将int64转为int8的时候,编译不会出错的,但是会数据的溢出
  var n1 int64 = 666666
  var n2 int8 = int8(n3)
  // 这里发生了截断
  fmt.Println(n2)//56
}


8.基本数据类型转为string

  • 在程序开发中,我们经常需要将基本数据类型转成string类型。或者将string类型转成基本数据类型。
  • 将基本数据类型转化为string有两种方式:
    1.fmt包中的Sprintf“%参数”要转换的变量注意:原先的变量值不变,只是将面值赋给一个string类型的变量))— 推荐
    2.使用strconv包中的函数。
  • 第一种方式转换如下:
package main
import "fmt"
func main(){
  var n1 int = 19
  var n2 float32 = 4.78
  var n3 bool = false
  var n4 byte = 'a'
  var s1 string = fmt.Sprintf("%d",n1)
  fmt.Printf("s1对应的类型是:%T ,s1 = %q \n",s1, s1)
  var s2 string = fmt.Sprintf("%f",n2)
  fmt.Printf("s2对应的类型是:%T ,s2 = %q \n",s2, s2)
  var s3 string = fmt.Sprintf("%t",n3)
  fmt.Printf("s3对应的类型是:%T ,s3 = %q \n",s3, s3)
  var s4 string = fmt.Sprintf("%c",n4)
  fmt.Printf("s4对应的类型是:%T ,s4 = %q \n",s4, s4)
}


57331e9fcda04437ae519b18a3e5fb25.png

  • 第二种方式转换我们还需了解strconv包,以及包中我们将要用到的函数。

7a0e1867d22947b3813f30d936246ac2.png


根据函数的功能及使用,如下转换:

package main
import(
        "fmt"
        "strconv"
)
func main(){
        var n1 int = 18
        var s1 string = strconv.FormatInt(int64(n1),10)  //参数:第一个参数必须转为int64类型 ,第二个参数指定字面值的进制形式为十进制
        fmt.Printf("s1对应的类型是:%T ,s1 = %q \n",s1, s1)
        var n2 float64 = 4.29
        var s2 string = strconv.FormatFloat(n2,'f',9,64)
        //第二个参数:'f'(-ddd.dddd)  第三个参数:9 保留小数点后面9位  第四个参数:表示这个小数是float64类型
        fmt.Printf("s2对应的类型是:%T ,s2 = %q \n",s2, s2)
        var n3 bool = true
        var s3 string = strconv.FormatBool(n3)
        fmt.Printf("s3对应的类型是:%T ,s3 = %q \n",s3, s3)
}


9.string转为基本数据类型

string转为基本数据类型的方式是使用strconv包中的函数。

c95344a29abe4abb9653b9ef59314e3b.png

239974684e3345c6a852152164fe497d.png

517075e189a24ca6982b15402a471f82.png


下面通过使用函数来代码实现转化:

package main
import(
        "fmt"
        "strconv"
)
func main(){
//1. string 转 bool
        //string-->bool
        var s1 string = "true"
        var b bool
        //ParseBool这个函数的返回值有两个:(value bool, err error)
        //value就是我们得到的布尔类型的数据,err出现的错误
        //我们只关注得到的布尔类型的数据,err可以用_直接忽略
        b , _ = strconv.ParseBool(s1)
        fmt.Printf("b的类型是:%T,b=%v \n",b,b)
//2.  string 转 int64        
        //string---》int64
        var s2 string = "19"
        var num1 int64
        num1,_ = strconv.ParseInt(s2,10,64)
        fmt.Printf("num1的类型是:%T,num1=%v \n",num1,num1)
//3.  string 转 float64        
        //string-->float32/float64
        var s3 string = "3.14"
        var f1 float64
        f1,_ = strconv.ParseFloat(s3,64)
        fmt.Printf("f1的类型是:%T,f1=%v \n",f1,f1)
//4.        
        //注意:string向基本数据类型转换的时候,
        //一定要确保string类型能够
        //转成有效的数据类型,
        //否则最后得到的结果就是按照对应类型的默认值输出
        var s4 string = "golang"
        var b1 bool
        b1 , _ = strconv.ParseBool(s4)
        fmt.Printf("b1的类型是:%T,b1=%v \n",b1,b1)
//5.        
        var s5 string = "golang"
        var num2 int64
        num2,_ = strconv.ParseInt(s5,10,64)
        fmt.Printf("num2的类型是:%T,num2=%v \n",num2,num2)
}


运行结果为:


4f1b77b81c5743f5bb7678c5fe0d3a29.png


可以看到,b1与 num2的值都是默认值。


写在最后


GO语言需要求精的地方多,不能放过每一个部分,不然出来的代码就很可能会不够严谨。


感谢阅读本小白的博客,错误的地方请严厉指出噢!


相关文章
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
136 1
|
3月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
279 1
|
9月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
9月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
3月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
351 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
226 0
|
3月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
205 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
295 0
|
3月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
3月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。