Go的基本语法和项目结构

Go的语言特性和基本语法

Go语言的语法标准

  • Go 源文件以 go 为扩展名。
  • Go 应用程序的执行入口是 main函数,和其它编程语言(比如 iava/c)
  • Go 语言严格区分大小写。
  • Go 方法由一条条语句构成,每个语句后不需要分号(Go 语言会在每行后自动加分号)
  • Go编译器是逐行编译语句,一行就写一句语句,不能把多条语句放在一行
  • Go中定义的变量或者import的包没有用到则会编译失败
  • Go语言的语法,定义函数的时候,{ 必须和函数名在同一行,不能另起一行。

Go程序的语言结构

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
   fmt.Println("Hello, World!")
}
  • package main 定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包。package main 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
  • import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
  • func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
  • fmt.Println(...) :可以将字符串输出到控制台,并在最后自动增加换行字符 \n

Go的文件组织结构

Go 的包结构和模块结构是 Go 项目组织和模块化的基础

包(Package)

定义:Go 中的 最小代码组织单位

特点

  • 每个 Go 源文件都必须以 package 包名 开头。
  • 一个目录中的所有 .go 文件构成一个包(package),只能有一个包名
  • Go 程序的执行入口是 main 包中的 main() 函数。
  • 包名通常与目录名相同,包路径以 模块名 + 目录名 表示

典型的Go项目文件结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
myapp/                   模块名go.mod
├── go.mod               模块定义
├── main.go              main 入口
├── config/              配置相关代码包
   └── config.go
├── handler/             HTTP/API 处理逻辑
   └── user_handler.go
├── service/             核心业务逻辑
   └── user_service.go
├── model/               数据结构和实体
   └── user.go
├── repository/          数据库访问层DAO
   └── user_repo.go
├── utils/               通用工具函数
   └── hash.go
└── internal/            内部包只限本模块内使用
    └── secret.go

导出形式

  • 首字母大写的标识符是可导出的(外部可访问),可以被外部包的代码所使用(客户端程序需要先导入这个包)类似于Java中的 public
  • 首字母小写的标识符只能在本包内使用,则对包外是不可见的,类似于Java中的 protected

模块(Module)

Go 1.11+ 引入的新概念,用于管理项目依赖,由 go.mod 文件定义

Go的基本语法

注释

  • 行注释

    1
    
    //注释内容
    
  • 块注释

    1
    
    /*注释内容*/
    

代码缩进

  • 通常使用Tab来解决缩进
  • 可以使用 gofmt 命令行命令来自动格式化代码

空格

在 Go 语言中,空格通常用于分隔标识符、关键字、运算符和表达式,以提高代码的可读性。

  • Go 语言中变量的声明必须使用空格隔开如

    1
    2
    
    var x int
    const Pi float64 = 3.14159265358979323846
    
  • 在运算符和操作数之间要使用空格能让程序更易阅读

    1
    
    fruit = apples + oranges; 
    
  • 在关键字和表达式之间要使用空格

    1
    2
    3
    
    if x > 0 {
        // do something
    }
    

格式化字符串

Go 语言中使用 fmt.Sprintffmt.Printf 格式化字符串并赋值给新串:

  • Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。
  • Printf 根据格式化参数生成格式化的字符串并写入标准输出。
그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计