Go 程序结构
💯

Go 程序结构

Tags
go
backend
API
Server
Author
Created
May 20, 2024 02:41 PM
 

Go 语言特性

  • Go 是一种跨平台的开源编程语言。
  • Go 可以用来创建高性能应用程序。
  • Go 是一种快速、静态类型、编译型语言,以其简洁和效率著称。
  • Go 的语法与 C++ 类似。

程序结构

1. 命名

Go语言中类似if和switch的关键字有25个;关键字不能用于自定义名字,只能在特定语法结构中使用。
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
还有大约30多个预定义的名字:
内建常量: true false iota nil 内建类型: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error 内建函数: make len cap new append copy close delete complex real imag panic recover
 

2. 声明

Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明。

3. 变量

var 变量名字 类型 = 表达式 # Example var b, f, s = true, 2.3, "four" // bool, float64, string
 
简短变量声明
i, j := 0, 1
 
指针
x := 1 p := &x // p, of type *int, points to x fmt.Println(*p) // "1" *p = 2 // equivalent to x = 2 fmt.Println(x) // "2"

4. 赋值

x = 1 // 命名变量的赋值 *p = true // 通过指针间接赋值 person.name = "bob" // 结构体字段赋值 count[x] = count[x] * scale // 数组、slice或map的元素赋值

5. 类型

type 类型名字 底层类型 type Celsius float64 // 摄氏温度 type Fahrenheit float64 // 华氏温度

6. 包和文件

Go语言中的包和其他语言的库或模块的概念类似,目的都是为了支持模块化、封装、单独编译和代码重用。
 
每个包都对应一个独立的名字空间。
  • 导入包
import ( "fmt" "os" "strconv" "gopl.io/ch2/tempconv" )

7. 作用域

在包级别,声明的顺序并不会影响作用域范围,因此一个先声明的可以引用它自身或者是引用后面的一个声明,这可以让我们定义一些相互嵌套或递归的类型或函数。但是如果一个变量或常量递归引用了自身,则会产生编译错误。
在这个程序中:
if f, err := os.Open(fname); err != nil { // compile error: unused: f return err } f.ReadByte() // compile error: undefined f f.Close() // compile error: undefined f
变量f的作用域只在if语句内,因此后面的语句将无法引入它,这将导致编译错误。你可能会收到一个局部变量f没有声明的错误提示,具体错误信息依赖编译器的实现。
通常需要在if之前声明变量,这样可以确保后面的语句依然可以访问变量:
f, err := os.Open(fname) if err != nil { return err } f.ReadByte() f.Close()
不要将作用域和生命周期混为一谈。声明语句的作用域对应的是一个源代码的文本区域