• 03、GO语言变量定义、函数


    目录

    1. 第一个Go程序

     2. Go语言命令

    go build命令

    go run 命令

    go mod init 命令

    3.变量的定义

    方法1:  var  b int = 1

    方法2  var := 4

    使用reflect库

    4.Go里面的指针

    5.Go语言的函数(functions)

    5.5实现2个数的加法、减法等

    5.6  可变长参数


    1. 第一个Go程序

    新建一个文件 example.go

    1. // 声明该文件所在包,如果是主程序就是main,不是主程序就写包名
    2. package main
    3. // 导入库,fmt用来处理标准输入输出
    4. import "fmt"
    5. // main函数就是整个函数的入库,main函数所在的报名也必须为‘main’
    6. func main() {
    7. // 调用fmt的Println方法,在屏幕输出信息
    8. fmt.Println("hello,world")
    9. fmt.Println("this is my first Go!")
    10. }

    运行结果

    1. [root@localhost go_lianxi]# go run example.go
    2. hello,world
    3. this is my first Go!

    Go语法规则:

    1. package main
    2. 声明了 main.go 所在的包,Go 语言中使用包来组织代码。一般一个文件夹即一个包,包内可以暴露类型
    3. 或方法供其他包使用。
    1. import “fmt”
    2. fmt 是 Go 语言的一个标准库/包,用来处理标准输入输出。
    1. func main
    2. main 函数是整个程序的入口,main 函数所在的包名也必须为 main
    3. !!主包中必须包含一个main函数!!
    1. fmt.Println(“Hello World!”)
    2. 调用 fmt 包的 Println 方法,打印出 “Hello World!”
    1. 其他知识点:
    2. 一行代表一个语句结束,多个语句写在同一行,它们则必须使用 ; 人为区分
    3. 注释:
    4. 单行注释: //
    5. 多行注释:/* sth */
    6. 标识符:同python标识符规则

    先编译再执行

    编译成二进制可执行程序, build 后,你会发现在同级目录下会生成一个同名的可执行文件(无扩展名)
    编译后直接运行程序
    ###################################################

     2. Go语言命令

    Go 是一门编译型语言, Go 语言的工具链将源代码及其依赖转换成计算机的机器指令
    Go 语言提供的工具都通过一个单独的命令 go 调用, go 命令有一系列子命令。
    最简单的一个子命令就是 run 。这个命令编译一个或多个以 .go 结尾的源文件,链接库文件,并运行最终生成的可执行 文件。
    Go 语言原生支持 Unicode ,它可以处理全世界任何语言的文本
    ###################################################

    go build命令

    :编译成可执行二进制文件译注: Windows 系统下生成的可执行文件是 helloworld.exe ,增加
    .exe 后缀名)
    1. [root@localhost go_lianxi]# ls
    2. example.go
    3. [root@localhost go_lianxi]# go build example.go
    4. [root@localhost go_lianxi]# ls
    5. example example.go
    6. [root@localhost go_lianxi]# ./example
    7. hello,world
    8. this is my first Go!
    9. [root@localhost go_lianxi]# ll
    10. 总用量 1724
    11. -rwxr-xr-x. 1 root root 1758476 8月 1 20:55 example
    12. -rw-r--r--. 1 root root 391 8月 1 20:51 example.go

    ###################################################

    go run 命令

    运行源代码

    1. [root@localhost go_lianxi]# go run example.go
    2. hello,world
    3. this is my first Go!

    ###################################################

    go mod init 命令

    初始化,解决包

    1. # 初始化 go mod init account
    2. # 解决依赖问题(检查,删除错误或者不使用的modules,下载没download的package)
    3. go mod tidy

    ###################################################

    3.变量的定义

    几种变量定义的方式:

    方法1:  var  b int = 1

    1. 1 package main
    2. 2
    3. 3 import "fmt"
    4. 4
    5. 5 func main() {
    6. 6 // 变量定义方法1
    7. 7 // 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
    8. 8 var a int
    9. 9 var b int = 1
    10. 10 var s1 string = "b"
    11. 11 fmt.Println(a,b,s1)
    12. 12 }

    执行结果:

    1. [root@localhost go_lianxi]# vim var.go
    2. [root@localhost go_lianxi]# go run var.go
    3. 0 1 b

    ###################################################

    方法2  var := 4

    1. [root@localhost go_lianxi]# cat var.go
    2. package main
    3. import "fmt"
    4. func main() {
    5. // 变量定义方法1
    6. // 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
    7. var a int
    8. var b int = 1
    9. var s1 string = "b"
    10. fmt.Println(a,b,s1)
    11. // 方法2
    12. c := 4
    13. msg := "msg"
    14. fmt.Println(c,msg)
    15. }

    执行结果

    1. [root@localhost go_lianxi]# go run var.go
    2. 0 1 b
    3. 4 msg

    注意,不能定义了变量又不使用,否则会报错

    1. [root@localhost go_lianxi]# go run var.go
    2. # command-line-arguments
    3. ./var.go:10:6: s declared but not used
    4. ./var.go:11:18: undefined: s1

    ###################################################

    查看变量类型

    使用reflect库

    1. package main
    2. import "fmt"
    3. import "reflect"
    4. func main() {
    5. // 变量定义方法1
    6. // 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
    7. var a int
    8. var b int = 1
    9. var s1 string = "b"
    10. fmt.Println(a,b,s1)
    11. // 方法2
    12. c := 4
    13. msg := "msg"
    14. fmt.Println(c,msg)
    15. d := 3.14159
    16. fmt.Println(reflect.TypeOf(b))
    17. fmt.Println(reflect.TypeOf(s1))
    18. fmt.Println(reflect.TypeOf(d))
    19. }

    执行结果

    1. [root@localhost go_lianxi]# go run var.go
    2. 0 1 b
    3. 4 msg
    4. int
    5. string
    6. float64

    ###################################################

    4.Go里面的指针

    1. package main
    2. import "fmt"
    3. import "reflect"
    4. func main() {
    5. // 变量定义方法1
    6. // 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
    7. var a int
    8. var b int = 1
    9. var s1 string = "b"
    10. fmt.Println(a,b,s1)
    11. // 方法2
    12. c := 4
    13. msg := "msg"
    14. fmt.Println(c,msg)
    15. d := 3.14159
    16. fmt.Println(reflect.TypeOf(b))
    17. fmt.Println(reflect.TypeOf(s1))
    18. fmt.Println(reflect.TypeOf(d))
    19. var p *string
    20. // 指针里面是用来存放地址的
    21. p = &msg
    22. fmt.Println(p)
    23. // 修改指针指向对象的值
    24. *p = "hello"
    25. fmt.Println(*p)
    26. fmt.Println(msg)
    27. }

    执行结果

    1. [root@localhost go_lianxi]# go run var.go
    2. 0 1 b
    3. 4 msg
    4. int
    5. string
    6. float64
    7. 0xc000010260
    8. hello
    9. hello

    ###################################################

    5.Go语言的函数(functions)

    5.1. 基本概念
    函数是基本的代码块,⽤于执⾏⼀个任务。
    Go 语⾔最少有个 main() 函数。
    函数声明告诉了编译器函数的名称,返回类型,和参数。
    Go 语⾔标准库提供了多种可动⽤的内置的函数。例如, len() 函数可以接受不同类型参数并返回该类型的⻓度。如
    果我们传⼊的是字符串则返回字符串的⻓度,如果传⼊的是数组,则返回数组中包含的函数个数。
    ###################################################
    5.2. 函数定义
    Go 语⾔函数定义格式如下:
    1. func function_name( [parameter list] ) [return_types] {
    2. 函数体
    3. }

    函数定义解析:

    1. func:函数由 func 开始声明
    2. function_name:函数名称,参数列表和返回值类型构成了函数签名
    3. parameter list:参数列表,参数就像⼀个占位符,当函数被调⽤时,你可以将值传递给参数,这个值被称为
    4. 实际参数参数列表指定的是参数类型顺序及参数个数参数是可选的,也就是说函数也可以不包含参
    5. return_types:返回类型,函数返回⼀列值return_types 是该列值的数据类型有些功能不需要返回值,
    6. 函数体
    7. 函数参数类型 函数内对形参操作, 是否影响实参?
    8. 变量 否
    9. 指针 是
    10. 数组 否
    11. 数组元素 否
    12. slice 是
    13. 这种情况下 return_types 不是必须的
    ###################################################
    5.3. 函数特性
    Go 函数 不⽀持 嵌套、重载和默认参数
    Go 函数 ⽀持 ⽆需声明原型、不定⻓度变参、多返回值、命名返回值参数、匿名函数、闭包
    定义函数使⽤关键字 func ,且左⼤括号不能另起⼀⾏
    函数如果没有返回值,不能使⽤输出函数直接输出
    函数也可以作为⼀种类型使⽤
    ###################################################
    5.4. 参数与返回值
    ⼀个典型的函数定义如下,使⽤关键字 func ,参数可以有多个,返回值也⽀持有多个。特别地, package main
    中的 func main() 约定为可执⾏程序的⼊⼝。
    ⽆返回值的函数
    注意:对于⽆返回值的函数,函数体中不需要也不能进⾏ return 返回
    1. package main
    2. import "fmt"
    3. func funcname() {
    4. fmt.Println("hello world")
    5. }
    6. func main() {
    7. // 调⽤
    8. funcname()
    9. }

    ###################################################

    5.5实现2个数的加法、减法等

    1. [root@localhost src]# cat func01.go
    2. package main
    3. import "fmt"
    4. func main() {
    5. fmt.Println("vim-go")
    6. num := 100
    7. add(num)
    8. // go 调用参数是默认传值过去
    9. fmt.Println(num)
    10. // realadd 传过去的是一个指针,指针指向的是num的地址,
    11. realadd(&num)
    12. fmt.Println(num)
    13. fmt.Println(add2(1,5))
    14. fmt.Println(add3(3,1))
    15. }
    16. func add(num int) {
    17. num +=1
    18. }
    19. func realadd(num *int) {
    20. *num += 1
    21. }
    22. func add2(num1 int, num2 int) (int, int){
    23. return num1+num2, 100
    24. }
    25. func add3(num1 int, num2 int) (ans int, ans2 int){
    26. ans = num1+num2
    27. ans2 = num1-num2
    28. return
    29. }
    1. [root@localhost src]# go run func01.go
    2. vim-go
    3. 100
    4. 101
    5. 6 100
    6. 4 2
    也可以给返回值命名,简化 return ,例如 add 函数可以改写为
    1. func add(num1 int, num2 int) (ans int) {
    2. ans = num1 + num2
    3. return
    4. }

    ###################################################

    5.6  可变长参数

    1. [root@localhost src]# cat func02.go
    2. package main
    3. import (
    4. "fmt"
    5. "reflect"
    6. )
    7. func main() {
    8. fmt.Println("vim-go")
    9. add(1,2,3,4,5)
    10. }
    11. func add(nums ...int) {
    12. fmt.Println(reflect.TypeOf(nums)) // 输出 []int
    13. fmt.Println(len(nums)) // 输出 5
    14. fmt.Println(nums) // 输出 [1,2,3,4,5]
    15. sum := 0
    16. for i := 0; i < len(nums); i++ {
    17. sum += nums[i] // 输出15
    18. }
    19. fmt.Println(sum)
    20. }

    执行结果

    1. [root@localhost src]# go run func02.go
    2. vim-go
    3. []int
    4. 5
    5. [1 2 3 4 5]
    6. 15

  • 相关阅读:
    vue3+ts 登陆页面,前端实现滑块验证
    [附源码]JAVA毕业设计科大学生党员之家设计(系统+LW)
    tpwe兼容微擎小程序前端请求写法
    系统整理K8S的配置管理实战-建议收藏系列
    Java Spring Boot 自动装配:简化配置和提高开发效率
    leetcode59. 螺旋矩阵 II
    基于YOLOv2和传感器的多功能门禁系统
    4.1 配置Mysql与注册登录模块
    docker的疑难杂症
    Nacos注册中心有几种调用方式?
  • 原文地址:https://blog.csdn.net/qq_48391148/article/details/126109756