脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 深入了解Go语言的基本语法与常用函数

深入了解Go语言的基本语法与常用函数

2022-07-16 09:55哥德巴赫的猜想 Golang

这篇文章主要为大家详细介绍一下Go语言中的基本语法与常用函数,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下

一、基本语法

标识符命名规范

Go 是区分大小写的,标识符的命名包含了 Go 中变量、常量、函数、结构体、接口以及方法的命令,Go 限定任何需要对外暴露的标识符必须以大写字母开头,不需要对外暴露的标识符则需要以小写字母开头。

标识符以大写开头,就表示可以被外部包的代码引用,称之为导出。如果以小写字母开头,那么对外就是不可见的,但是在整个包的内部是可见且可用的。

标识符的命名应该避免与 Go 中内置的关键字冲突。

变量的命令规范

采用驼峰命名法,首字母根据访问控制大写或者小写

?
1
2
var username string
var url string

常量的命名规范

常量的名称全部使用大写字母组成,并且使用下划线来分隔多个词

?
1
const JUEJIN_URL = "https://juejin.cn"

枚举类型的常量

?
1
2
3
4
5
const (
    SUCCESS = "200"
    NOT_FOUND = "404"
    INTERAL_SERVER_ERROR = "500"
)

结构体的命名规范

结构体也是采用驼峰命名法,首字母的大小写根据访问控制决定

?
1
2
3
4
type Info stuct {
    Username string
    Age int
}

接口命名规范

接口的命名规范与结构体的命名规范基本一致,只有一个方法的接口命名以 "er" 结尾,如 Fighter

?
1
2
3
type Fighter interface {
    fight(p []byte)(skill string, err error)
}

文件和包的命名规范

Go 文件和包的命名有小写字母组成,简短、有意义。注意 包的命名不要使用下划线或者驼峰命名。

Go 中的常用关键字

关键字 说明
var 定义变量
const 定义常量
package
import 导入包关键字
func 定义函数关键字
return 用于修饰函数中返回值
interface 定义接口
struct 定义抽象数据类型
type 声明自定义类型
map 声明 map 数据类型
range 用于遍历
if、else、for、switch、break、case、continue、fallthrough、soto、default 用于流程控制

Go 中的注释

Go 中使用 // 来注释代码,使用 /* 多行代码 */ 来注释多行代码

变量的定义与使用

Go 中的变量有多种定义方式,可以使用关键字 var 定义变量,也可以一次定义多个变量。

使用 var 关键字定义变量

?
1
var variable_name variable_type = value

一次声明多个相同类型的变量

?
1
var variable_name1, variable_name2 variable_type

一次声明多个不同类型的变量

?
1
2
3
4
var (
    variable_name1 variable_type
    variable_name2 variable_type
)

使用 := 自定判断变量类型定义变量

?
1
name := "Tony"

可以省略 var 关键字

在 go-quickstart 项目下新建一个文件夹,命名为 ”01-基本语法“,在该文件夹下新建 Go 文件 ex1.go

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main
 
import "fmt"
 
func main() {
 
   // 使用 var 关键字定义变量
   var name string = "tony"
   fmt.Println("name 变量的值为:", name)
 
   // 使用 var 定义多个相同类型的变量
   var username, address, phone string
   username = "Tony"
   address = "NY"
   phone = "010-111222"
   fmt.Println("name、address、phone 三个变量的值分别为:", username, address, phone)
 
   // 使用 var 定义多个不同类型的变量
   var (
      user_name    string
      user_age     int
      user_balance float64
   )
 
   user_name = "tony"
   user_age = 40
   user_balance = 1000000.0
   fmt.Println("user_name, user_age, user_balance 三个变量的值分别为:", user_name, user_age, user_balance)
 
   // 使用自动类型推断方式定义变量
   user_id := 1000
   fmt.Println("user_id 变量的值为:", user_id)
}

执行上述代码,输出结果如下:

name 变量的值为: tony
name、address、phone 三个变量的值分别为: Tony NY 010-111222
user_name, user_age, user_balance 三个变量的值分别为: tony 40 1e+06
user_id 变量的值为: 1000

使用 := 定义变量是 Go 中最常使用的变量定义的方式,但是这种方式定义的变量只能在局部代码块中使用,不能再全局使用

定义常量

常量的定义使用 const 关键字,常量一旦被定义就无法修改

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main
 
import "fmt"
 
func main() {
 
   // 定义常量使用 const 关键字,一旦被定义,不可修改
   const URL = "https://juejin.cn"
 
   fmt.Println("常量 URL 的值为:", URL)
 
   // 一次定义多个常量
   const (
      HOST = 3306
      APP  = "/go"
   )
 
   fmt.Println("HOST 和 APP 两个常量的值为:", HOST, APP)
 
   // 定义常量时,如果只有第一个常量赋值了,后面常量没有赋值情况下,默认的值等于第一个常量赋的值
   const (
      NUM = 100
      COUNT
      QUANTITY
   )
   fmt.Println("NUM,COUNT,QUANTITY 的值分别为:", NUM, COUNT, QUANTITY)
}

执行上述代码,输出结果如下:

常量 URL 的值为: https://juejin.cn
HOST 和 APP 两个常量的值为: 3306 /go
NUM,COUNT,QUANTITY 的值分别为: 100 100 100

二、常用函数

main 函数与 init 函数

main 函数

在上面的代码中,所有的代码都是写在使用 func 关键字定义的 main 函数中,在 Go 中 main 函数是入口函数,类似 Java 中的 main 函数。

init 函数

Go 中 init 函数负责 package 的初始化,init 函数:

  • 在 main 函数前执行,自动被调用,初始化 package 中的变量等
  • init 函数不能被其他函数调用
  • 每个包可以有多个 init 函数,同一个包的 init 函数执行顺序与 init 函数定义的位置有关
  • 包中每个源文件也可以又有多个init 函数
  • 不同包中的 init 函数按照导入的依赖关系决定 init 函数的执行顺序
  • init 函数没有返回值
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// filename ex4.go
 
package main
 
import "fmt"
 
func init() {
   fmt.Println("这是第一个 init 函数")
}
 
func init() {
   fmt.Println("这是第二个 init 函数")
}
 
func init() {
   fmt.Println("这是第三个 init 函数")
}
 
func main() {
 
   // 常用函数
   fmt.Println("这是 main 函数")
 
}

执行上述代码,输出记过如下:

这是第一个 init 函数
这是第二个 init 函数
这是第三个 init 函数
这是 main 函数

调用第一个和第三个 init 函数的位置,再次执行改代码

这是第三个 init 函数
这是第一个 init 函数
这是第二个 init 函数
这是 main 函数

同一个文件中 init 函数执行的顺序与位置有关,但是都会先于 main 函数执行。

init 函数 VS main 函数

main 函数和 init 函数定义时都不能有任何返回值,且都是有 Go 自动调用的。

main 函数只能定义一个,init 函数可以定义多个。

这两个函数官方只能定义在测试环境中使用,生产环境不推荐使用。

fmt 包及其函数

上述代码中除了 main 函数还涉及到了打印相关的函数,这些函数都在 fmt 包下,共有三个输出函数

  • Println:自动换行,且一次输出多个值时,多个值中间会带有空格
  • Print:不自动换行,多个值连续输出,没有空格
  • Printf:格式化输出
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// filename ex5.go
 
 
package main
 
import "fmt"
 
func main() {
 
   // 常用函数
   name_01 := "tony1"
   name_02 := "tony2"
   name_03 := "tony3"
   fmt.Println("自动换行,多个值之间会有空格", name_01, name_02, name_03)
   fmt.Print("不自动换行,多个值之间没有空格", name_01, name_02, name_03)
   fmt.Print("\n")
   fmt.Printf("%v, %v, %v 格式化输出", name_01, name_02, name_03)
 
}

执行上述代码,输出结果如下:

自动换行,多个值之间会有空格 tony1 tony2 tony3
不自动换行,多个值之间会有空格tony1tony2tony3
tony1, tony2, tony3 格式化输出

格式化输出时 %v 表示获取变量的值。

以上就是深入了解Go语言的基本语法与常用函数的详细内容,更多关于Go语言 语法 函数的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7120264127414534175

延伸 · 阅读

精彩推荐
  • Golang浅谈golang二进制bit位的常用操作

    浅谈golang二进制bit位的常用操作

    这篇文章主要介绍了浅谈golang二进制bit位的常用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小孟哥9532021-03-04
  • Golanggolang遍历时修改被遍历对象的示例详解

    golang遍历时修改被遍历对象的示例详解

    这篇文章主要介绍了golang遍历时修改被遍历对象的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    janbar9192021-03-26
  • Golang在 Go 代码中如何绑定 Host?

    在 Go 代码中如何绑定 Host?

    在公司内部,为了安全,可能会有域名是需要绑定 host 才能访问的,如果是通过浏览器访问,我们会修改本机的 hosts 文件;然而,如果是要通过程序访问这...

    polarisxu10622021-09-14
  • Golanggolang值类型转换成[]uint8类型的操作

    golang值类型转换成[]uint8类型的操作

    这篇文章主要介绍了golang值类型转换成[]uint8类型的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    爱了李召君10732021-06-23
  • GolangGO语言实现的http抓包分析工具pproxy介绍

    GO语言实现的http抓包分析工具pproxy介绍

    这篇文章主要介绍了GO语言实现的http抓包分析工具pproxy介绍,本文同时对比了Fiddler、Charles等抓包软件,需要的朋友可以参考下 ...

    脚本之家8002020-04-25
  • GolangGo语言编程中判断文件是否存在是创建目录的方法

    Go语言编程中判断文件是否存在是创建目录的方法

    这篇文章主要介绍了Go语言编程中判断文件是否存在是创建目录的方法,示例都是使用os包下的函数,需要的朋友可以参考下 ...

    脚本之家7112020-04-27
  • GolangGolang与其他语言不同的九个特性

    Golang与其他语言不同的九个特性

    近来关于对Golang的讨论有很多,七牛的几个大牛们也断定Go语言在未来将会快速发展,并且很可能会取代Java成为互联网时代最受欢迎的编程语言。本文将带...

    海拥3942021-11-14
  • GolangGO语言映射(Map)用法分析

    GO语言映射(Map)用法分析

    这篇文章主要介绍了GO语言映射(Map)用法,以实例形式较为详细的分析了针对映射的创建、填充、遍历及修改等操作的技巧,需要的朋友可以参考下 ...

    shichen20142712020-04-12