• go语言的使用方法


    一.go语言的介绍

    1.简介

    2.应用领域

    3.使用go语言的公司

    4.go语言开发工具介绍

    5.go语言开发环境搭建

    【1】搭建Go开发环境-安装和配置SDK

    基本介绍:

    • 1).SDK的全称(Software Development Kit软件开发工具包)
    • 2).SDK是提供给开发人员使用的,其中包含了对应的开发语言的工具包。

    【2】.SDK下载

    【3】.安装sdk:

    • 请注意:安装路径不要有中文或者特殊符号如空格等
    • SDK安装目录建议:一般我安装在d:golang安装时,基本上是傻瓜式安装,解压可以使用
    • 一定要注意看版本号哦,不然会下错的哦
    • 解压之后会出现一个go的整个文件夹就是配置环境

    6.DOS

    【1】.DOS操作系统

    • --Microsoft公司推出的操作系统。(在windows之前的操作系统)
    • --Dos是英文"Dis Operating System"的缩写,在其中含意是"磁盘操作系统"
    • --Dos是单用户、单任务操作系统(只能执行一个任务)

    【2】.Dos命令

    • --在windows中,我们通过鼠标菜单来操作系统,而在dos操作系统中,要通过dos命令来操作系统。
    • --是Dos操作系统的命令,是一种面向键盘的操作命令
    • --不区分大小写

    【3】命令学习

    • 命令提示符:win+r---->cmd

    【4】具体dos命令

    • 1).显示详细信息:dir

    • 2).清屏:cls
    • 3).切换历史命令:上下箭头
    • 4).补全命令:tab按键
    • 5).创建命令、删除命令:

    7.测试SDK环境搭建成功

    【1】进入到go语言的目录下查看是否安装成功

    【2】如果我想要在任意的路径下执行某个命令,需要将这个命令所在的目录配置到环境变量path中

    【3】.重新验证一下:

    二.go语言的使用

    1.第一段程序:Helloworld快速入门

    【1】.go语言基本结构:

    【2】第一个Helloworld

    1. package main //声明文件所在的包,每个go文件必须有归属的包
    2. import "fmt" //引入程序中需要用的包,为了使用包下的函数
    3. func main() { //主函数,程序的入口
    4. fmt.Println("Hello Golang!") //在控制台打印输出一句话,双引号中的内容会原样输出
    5. }

    【3】对源文件test.go进行编译:

    go build

    【4】执行操作:

    【5】通过go run直接可以帮我们编译执行源文件:

    【6】.编译的注意事项:

    可以在编译的时候重新去命名一个新的名字

    2.语法上的注意事项

    • 1).源文件以"go"为扩展名
    • 2).程序的执行入口是main()函数
    • 3).严格区分大小写
    • 4).方法由一条条语句构成,每个语句后不需要分号(Go语言会在每行后自动加分号),这也体现出Golang的简洁性
    • 5).Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则会报错。
    • 6).定义的变量或者import 的包如果没有使用到,代码不能编译通过。
    • 7).大括号都是成对出现的,缺一不可。

    3.注释的作用:

    • 用于注释说明解释程序的文字就是注释,注释提高了代码的阅读性;
    • 注释是一个程序原必须要具有的良好的编程习惯
    • 将自己的思想通过注释先整理出来,在用代码去体现

    【2】Golang中注释类型

    • 1).行注释 // ctrl +/在按一次取消注释
    • 2).块注释(多行注释) /**/ shift + alt + a再按一次取消注释

    go语言的官方文档库:https://studygolang.com/pkgdoc

    三.基本变量与类型

    变量

    1.变量的引入
    • 一个程序就是一个世界
    • 不论是使用哪种高级程序语言编写程序,变量都是程序的基本组成单位
    2.变量的介绍

    变量相当于内存中一个数据存储空间的表示

    3.变量的使用步揍
    • 声明
    • 赋值
    • 使用

    1. package main
    2. import "fmt"
    3. func main() {
    4. // 1.变量的声明
    5. var age int
    6. // 2.变量的赋值
    7. age = 18
    8. // 3.变量的使用
    9. fmt.Println("age = ", age)
    10. // 声明和赋值可以合成一句
    11. var age2 int = 19
    12. fmt.Println("age2 = ", age2)
    13. }

    如果一个变量age被重复定义之后会报错 ,不可以再赋值的时候给不匹配的类型

    4.变量四种的使用形式
    1. package main
    2. import "fmt"
    3. func main() {
    4. // 第一种:变量的使用方式
    5. var num int = 18
    6. fmt.Println(num)
    7. // 第二种:使用变量的类型,但是不赋值,使用默认值
    8. var num2 int
    9. fmt.Println(num2)
    10. // 第三种:如果没有写变量的类型,那么会根据等号后面的值进行判定变量的类型(自动类型的判断)
    11. var num3 = "tom"
    12. fmt.Println(num3)
    13. // 第四种:省略var :=不能写为=
    14. sex := "男"
    15. fmt.Println(sex)
    16. }

    5.声明多个变量
    1. package main
    2. import "fmt"
    3. // 全局变量:定义再函数外面的变量叫做全局变量
    4. var n7 = 100
    5. var n8 = 9.7
    6. // 以上定义全局变量太麻烦了,可以一次性声明
    7. var (
    8. n9 = 715
    9. n10 = "myy"
    10. )
    11. func main() {
    12. // 定义在{}里面的变量叫做局部变量
    13. // 第一种:变量的使用方式
    14. var num int = 18
    15. fmt.Println(num)
    16. // 第二种:使用变量的类型,但是不赋值,使用默认值
    17. var num2 int
    18. fmt.Println(num2)
    19. // 第三种:如果没有写变量的类型,那么会根据等号后面的值进行判定变量的类型(自动类型的判断)
    20. var num3 = "tom"
    21. fmt.Println(num3)
    22. // 第四种:省略var :=不能写为=
    23. sex := "男"
    24. fmt.Println(sex)
    25. fmt.Println("-----------------------------------------------------")
    26. // 声明多个变量
    27. var n1, n2, n3 int
    28. fmt.Println(n1)
    29. fmt.Println(n2)
    30. fmt.Println(n3)
    31. var n4, name, n5 = 10, "jack", 7.5
    32. fmt.Println(n4)
    33. fmt.Println(name)
    34. fmt.Println(n5)
    35. n6, height := 6.9, 100.6
    36. fmt.Println(n6)
    37. fmt.Println(height)
    38. fmt.Println(n7)
    39. fmt.Println(n8)
    40. fmt.Println(n9)
    41. fmt.Println(n10)
    42. }

    数据类型

    整数类型

    1.整数类型介绍

    简单来说,用于存放整数值的,比如10,-45

    2.有符号整数类型:

    代码测试超出范围:

    3.无符号整数类型

    超出边界报错:

    4.其他数据类型
    类型有无符号占用存储空间
    int

    32位系统~4字节

    64位系统~8字节

    uint

    32位系统~4字节

    64位系统~8字节

    rune等价int32
    byte等价uint8

    变量占用的字节数:

    1. package main
    2. import (
    3. "fmt"
    4. "unsafe"
    5. )
    6. func main() {
    7. // 定义一个整数类型
    8. var num1 int8 = 120
    9. fmt.Println(num1)
    10. // var num2 uint8 = 200
    11. // fmt.Println(num2)
    12. var num3 = 28
    13. // printf函数的作用:格式化,把num3类型填充到%p的位置上
    14. fmt.Printf("num3的类型是:%p", num3)
    15. fmt.Println(unsafe.Sizeof(num3))
    16. }

    浮点类型:

    1.浮点类型介绍:

    简单来说,就是用于存放小数值的,比如3.14、0.28

    2.浮点类型种类:

    • 底层存储空间和操作无关
    • 浮点类型底层存储:符号位+指数位+尾数位,所以尾数位只存了一个大概,很可能会出现精度的损失
    1. package main
    2. import "fmt"
    3. func main() {
    4. // 定义浮点类型的数据
    5. var num1 float32 = 3.14
    6. fmt.Println(num1)
    7. // 可以表示正浮点数,也可以表示负浮点数
    8. var num2 float32 = -3.14
    9. fmt.Println(num2)
    10. // 浮点数可以用十进制表示,也可以用科学计数法表示形式,E大小写都可以
    11. var num3 float32 = 314e-2
    12. fmt.Println(num3)
    13. var num4 float32 = 314e+2
    14. fmt.Println(num4)
    15. var num5 float32 = 314e+2
    16. fmt.Println(num5)
    17. var num6 float64 = 314e+2
    18. fmt.Println(num6)
    19. // 浮点数可能会有精度损坏,所以通常情况下,建议你使用:float64
    20. var num7 float32 = 256.00000000916
    21. fmt.Println(num7)
    22. var num8 float64 = 256.00000000916
    23. fmt.Println(num8)
    24. // golang中默认的浮点类型为:float64
    25. var num9 = 3.17
    26. fmt.Printf("num9对应的默认的类型为:%T", num9)
    27. }

    字符类型

    1. package main
    2. import "fmt"
    3. func main() {
    4. // 定义字符类型的数据:
    5. var c1 byte = 'a'
    6. fmt.Println(c1) //97
    7. var c2 byte = '6'
    8. fmt.Println(c2) //54
    9. var c3 byte = '('
    10. fmt.Println(c3 + 20) //40
    11. // 字符类型,本质上就是一个整数,也可以直接参与运算,输出字符的时候,会将对应的码值做一个输出
    12. // 字母,数字,标点等字符,底层是按照ASCII进行存储
    13. var c4 int = '中'
    14. fmt.Println(c4)
    15. // 汉字字符,底层对应的是Unicode码值
    16. // 对应的码值为20013,byte类型溢出,能存储范围:可以用int
    17. // 总结:Golang的字符对应的使用是UTF-8编码
    18. var c5 byte = 'A'
    19. // 想显示对应的字符,必须采用格式化输出
    20. fmt.Printf("c5对应的具体的字符为:%c",c5)
    21. }

    1.转义字符
    1. package main
    2. import "fmt"
    3. func main() {
    4. // 练习转义字符
    5. // \n换行
    6. fmt.Println("aaa\nbbb")
    7. // \b退格
    8. fmt.Println("aaa\bbbb")
    9. // \r 光标回到本行开头,后续输入就会替换原本的字符
    10. fmt.Println("aaaaa\rbbb")
    11. // \t制表符
    12. fmt.Println("aaaaaaaaaa")
    13. fmt.Println("aaaa\tbbbb")
    14. fmt.Println("aaaaaaaa\tbbbb")
    15. // \"
    16. fmt.Println("\"Golang\"")
    17. }

    布尔类型

    • 布尔类型也叫bool类型,bool类型只允许取值true和false
    • 布尔类型占1个字节
    • 布尔类型适合于逻辑运算,一般用于流程来控制
      1. package main
      2. import "fmt"
      3. func main() {
      4. // 测试布尔类型的数值:
      5. var flag01 bool = true
      6. fmt.Println(flag01)
      7. var flag02 bool = false
      8. fmt.Println(flag02)
      9. var flag03 bool = 5 < 9
      10. fmt.Println(flag03)
      11. }

    字符串类型

    字符串就是一串固定长度的字符连接起来的字符序列。

    1. package main
    2. import "fmt"
    3. func main() {
    4. // 1.定义一个字符串:
    5. var s1 string = "你好全面拥抱Golang"
    6. fmt.Println(s1)
    7. // 2.字符串是不可变的:指的是字符串一旦定义好,其中的字符的值不能改变
    8. // var s2 string = "abc"
    9. // s2 = "def"
    10. // s2[0] = 't'
    11. // fmt.Println(s2)
    12. // 3.字符串的表示形式:
    13. // (1).如果字符串没有特殊字符,字符串的表示形式用双引号
    14. var s3 string = "abcdefghigklmnopqrstuvwsyz"
    15. fmt.Println(s3)
    16. // (2).如果字符串中有特殊符号,字符串的表示形式用反引号``
    17. var s4 string = `
    18. package main
    19. import "fmt"
    20. func main() {
    21. // 测试布尔类型的数值:
    22. var flag01 bool = true
    23. fmt.Println(flag01)
    24. var flag02 bool = false
    25. fmt.Println(flag02)
    26. var flag03 bool = 5 < 9
    27. fmt.Println(flag03)
    28. }`
    29. fmt.Println(s4)
    30. //4.字符串的拼接效果
    31. var s5 string = "abc" + "def"
    32. s5 += "hijk"
    33. fmt.Println(s5)
    34. // 5.当一个字符串过长的时候:
    35. var s6 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" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def"
    36. fmt.Println(s6)
    37. }

    基本类型的默认值

    1. package main
    2. import "fmt"
    3. func main() {
    4. var a int
    5. var b float32
    6. var c float64
    7. var d bool
    8. var e string
    9. fmt.Println(a)
    10. fmt.Println(b)
    11. fmt.Println(c)
    12. fmt.Println(d)
    13. fmt.Println(e)
    14. }

     数据类型之间的转换

    • Go在不同类型的变量之间赋值时需要显式转换,并且只有显示转换(强制转换).
    • 表达式T(v)将值转换为类型T
    • T:就是数据类型
    • v:就是需要转换的变量
      1. package main
      2. import "fmt"
      3. func main() {
      4. // 进行类型转换:
      5. var n1 int = 100
      6. // var n2 float32 = n1 在这里 自动转换不好使,比如显示转换
      7. fmt.Println(n1)
      8. // fmt.Println(n2)
      9. var n2 float32 = float32(n1)
      10. fmt.Println(n2)
      11. // 注意:n1的类型其实还是int类型,只是将n1的值100转为了float32而已,n1还是int的类型
      12. fmt.Printf("%T", n1) //int
      13. fmt.Println()
      14. // 将int64转为int8的时候,编译不会出错的,但是会数据的溢出
      15. var n3 int64 = 888888
      16. var n4 int8 = int8(n3)
      17. fmt.Println(n4) //56
      18. var n5 int32 = 12
      19. var n6 int64 = int64(n5) + 30 //一定匹配=左右的数据类型
      20. fmt.Println(n5)
      21. fmt.Println(n6)
      22. var n7 int64 = 12
      23. var n8 int8 = int8(n7) + 127 //编译通过,但是结果可能会溢出
      24. // var n9 int8 = int8(n7) + 128 //编译不会溢出
      25. fmt.Println(n8)
      26. // fmt.Println(n9)
      27. }
    1.基本数据类型转为String

    基本数据类型和string的转换介绍

    • 在程序开发中,我们经常需要将基本数据类型转成string类型。或者将string类型转换成基本数据类型

    基本类型转型为string类型

    • 方式1:fmt.Springf("%参数",表达式)  ---- 重点关注,推荐使用
      1. package main
      2. import "fmt"
      3. func main() {
      4. var n1 int = 19
      5. var n2 float32 = 4.78
      6. var n3 bool = false
      7. var n4 byte = 'a'
      8. var s1 string = fmt.Sprintf("%d", n1)
      9. fmt.Printf("s1对应的类型是:%T,s1=%q \n", s1, s1)
      10. var s2 string = fmt.Sprintf("%f", n2)
      11. fmt.Printf("s2对应的类型是:%T,s2=%q \n", s2, s2)
      12. var s3 string = fmt.Sprintf("%t", n3)
      13. fmt.Printf("s3对应的类型是:%T,s3=%q \n", s3, s3)
      14. var s4 string = fmt.Sprintf("%c", n4)
      15. fmt.Printf("s4对应的类型是:%T,s4=%q \n", s4, s4)
      16. }
    • 方式2:使用strconv包的函数
      1. package main
      2. import (
      3. "fmt"
      4. "strconv"
      5. )
      6. func main() {
      7. var n1 int = 18
      8. var s1 string = strconv.FormatInt(int64(n1), 10) //参数:第一个参数必须转为int64类型,第二个参数指定字面值的进制形式为十进制
      9. fmt.Printf("s1对应的类型是:%T,s1=%q \n", s1, s1)
      10. var n2 float64 = 4.29
      11. var s2 string = strconv.FormatFloat(n2, 'f', 9, 64)
      12. // 第二个参数:'f'(-ddd.ddd) 第三个参数:9保留小数后面9位
      13. fmt.Printf("s2对应的类型是:%T,s1=%q \n", s2, s2)
      14. var n3 bool = true
      15. var s3 string = strconv.FormatBool(n3)
      16. fmt.Printf("s3对应的类型是:%T,s1=%q \n", s3, s3)
      17. }

    2.String转为基本数据类型

    string类型转为基本数据类型

    方法:使用strconv包的函数

    1. package main
    2. import (
    3. "fmt"
    4. "strconv"
    5. )
    6. func main() {
    7. // string --->bool
    8. var s1 string = "true"
    9. var b bool
    10. // ParseBool这个函数的返回值有两个:(value bool,err,error)
    11. // value就是我们得到的布尔类型的数据,err出现的错误
    12. // b = strconv.ParseBool(s1)
    13. // 我们只关注得到的布尔类型的数据,err可以用_直接忽略
    14. b, _ = strconv.ParseBool(s1)
    15. fmt.Printf("b对应的类型是:%T,b=%v \n", b, b)
    16. // string --->int64
    17. var s2 string = "19"
    18. var num1 int64
    19. num1, _ = strconv.ParseInt(s2, 10, 64)
    20. fmt.Printf("num1的类型是:%T,num1=%v \n", num1, num1)
    21. // string -->float32/float64
    22. var s3 string = "3.14"
    23. var f1 float64
    24. f1, _ = strconv.ParseFloat(s3, 64)
    25. fmt.Printf("f1的类型是:%T,f1=%v \n", f1, f1)
    26. var s4 string = "true"
    27. var b1 bool
    28. b1, _ = strconv.ParseBool(s4)
    29. fmt.Printf("b1对应的类型是:%T,b1=%v \n", b1, b1)
    30. // 注意:string向基本数据类型转换的时候,一定确保string类型能够转成有效的数据类型,否则最后得到的结果就是按照对应类型的默认值输出
    31. var s5 string = "19"
    32. var num2 int64
    33. num2, _ = strconv.ParseInt(s5, 10, 64)
    34. fmt.Printf("num2的类型是:%T,num2=%v \n", num2, num2)
    35. }

    复杂数据类型

    1.指针

    基本数据类型和内存:

    1. package main
    2. import (
    3. "fmt"
    4. )
    5. func main() {
    6. var age = 18
    7. // &符号+变量就可以获取这个变量的内存地址
    8. fmt.Println(&age) //0xc00005c030
    9. // 定义一个指针变量
    10. // var 代表要声明一个变量
    11. // ptr对应的类型是:*int是一个指针类型(可以理解位指向int类型的指针)
    12. // &age就是一个地址,是ptr变量得具体的值
    13. var ptr *int = &age
    14. fmt.Println(ptr)
    15. fmt.Println("ptr本身这个存储空间得地址为:", &ptr)
    16. // 想获取ptr这个指针或者这个地址指向得那个数据:
    17. fmt.Printf("ptr指向得数值为:%v", *ptr) //ptr指向得数值为:18
    18. }

     

    指针的细节:

    • 可以通过指针改变指向值
    • 指针变量接收的一定是地址值
    • 指针变量的地址不可以不匹配
    • 铺设:*float32意味着这个指针指向的是float32类型的数据,但是&num对应的int类型的不可以。
    • 基本数据类型(又叫值类型),都对应的指针类型,形式为*数据类型,比如int的对应的指针就是*int,float32对应的指针类型就是*float32,依此类推
    2.标识符:

    变量,方法等,只能是起名字的地方,那个名字叫做标识符

    标识符的定义规则:

    • 三个可以(组成部分):数字,字母,下划线_
    • 不建议使用,建议字母:26字母
    • 四个注意:不可以以数字开头,严格区分大小写,不能包含空格,不可以使用go中的保留关键字。
    • 见名知意:增加可读性
    • 下划线”_“本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能单独作为标识符使用。
    • 可以用如下形式,但是不建议:varint=10(int,float32,float64等不算是保留关键字,但是也尽量不要使用)
    • 长度无限制, 但是不建议太长 asdfasdfasdfasdfasdfasdfasdfasdfasdfasfd

    起名规则:

    • (1)包名:尽量保持package的名字和目录保持致, 尽量采取有意义的包名,简短,有意义,不要和标准库不要冲突
    • (2)变量名、函数名、常量名:采用驼峰法。
    • (3)如果变量名、函数名、常量名首字母大写,则可以被其他的包访间;如果首字母小写,则只能在本包中使用

    注意:

    • import导入语句通常放在文件开头包声明语句的下面。
    • 导入的包名需要使用双引号包裹起来。
    • 包名是从$GOPATH/src/后开始计算的,使用/进行路径分隔。

    需要定义一个环境变量

    main/test.go 

    1. package main
    2. import (
    3. "fmt"
    4. "gocode/testproject01/unit2/demo17/test"
    5. )
    6. // 程序的入口函数
    7. func main() {
    8. // 如果util.go中定义的是StuNo的话,那么在test.go中应该能够访问到
    9. fmt.Println(test.StuNo)
    10. }

    test/utils.go

    1. package test
    2. var StuNo int = 20034 //定义学生的学号
     3.关键字和预定义标识符:

    关键字就是程序发明者规定得有特殊含义得单词,又叫保留字。go语言中一共有25个关键字

    预定义标识符:一共36个预定标识符,包含基础数据类型和系统内嵌函数·

     

    四.运算符

    1.算术运算符

    算数运算符:+_*/%++,--

    算术运算符是对数值类型得变量进行运算的,比如,加减乘除

    1. package main
    2. import "fmt"
    3. func main() {
    4. // +加号
    5. // 1.正数2.相加操作3.字符串拼接
    6. var n1 int = +10
    7. fmt.Println(n1)
    8. var n2 int = 4 + 7
    9. fmt.Println(n2)
    10. var s1 string = "abc" + "def"
    11. fmt.Println(s1)
    12. // / 除号
    13. fmt.Println(10 / 3) //两个int类型数据运算,结果一定为整数类型
    14. fmt.Println(10.0 / 3) //浮点类型参与运算,结果为浮点类型
    15. // %取模,等价公式
    16. fmt.Println(10 % 3)
    17. fmt.Println(-10 % 3)
    18. fmt.Println(10 % -3)
    19. fmt.Println(-10 % -3)
    20. // ++自增操作
    21. var a int = 10
    22. a++
    23. fmt.Println(a)
    24. // ++自增 加1操作,--自减 减1操作
    25. // go语言里,++,--操作非常简单,只能单独使用,不能参与到运算中
    26. // ++,--只能再变量后面,不能写在变量的前面 --a ++a都是错误的
    27. }

     

    2.赋值运算符

    • 赋值运算符:=,+=,-=*=,/=,%=
    • 赋值运算符就是将某个运算后得值,赋给指定的变量
    1. package main
    2. import "fmt"
    3. func main() {
    4. var num1 int = 10
    5. fmt.Println(num1)
    6. var num2 int = (10+20)%3 + 3 - 7 //=右侧得值清楚后,再赋值给左侧
    7. fmt.Println(num2)
    8. var num3 int = 10
    9. num3 += 20
    10. fmt.Println(num3)
    11. // 练习:交换两个值并输出结果
    12. var a int = 8
    13. var b int = 4
    14. fmt.Printf("a = %v,b = %v", a, b)
    15. // 交换
    16. // 引入一个中间变量
    17. var t int
    18. t = a
    19. a = b
    20. b = t
    21. fmt.Printf("a = %v,b=%v", a, b)
    22. }

  • 相关阅读:
    知识图谱相关的操作
    vue实现一个基础的虚拟列表
    vue3全屏功能实现
    悠易科技LinkFlow徐涛:CDP就是数字营销时代的ERP
    移动云获取推拉流地址
    java Maven入门笔记
    稀疏数组举例详解(Java形式表示)
    机器学习和数据挖掘01- lasso regularization
    【Azure 环境】【Azure Developer】使用Python代码获取Azure 中的资源的Metrics定义及数据
    数组篇-其之一-数组的概念与一维数组
  • 原文地址:https://blog.csdn.net/2201_76041915/article/details/139236717