Go基础语法学习笔记

Tips: 新手向文章,其中涉及的代码你可以在 Https://github.com/fishcanf1y/Programming=Learning/Golang/ 中找到

Hello World:

package main  
import "fmt"  
  
func main() {  
    fmt.Printf("Hello World\n")  
    // go run hello.go
}

在第一行代码中 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package mainpackage main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。

下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。

下一行 fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n
使用 fmt.Print("hello, world\n") 可以得到相同的结果。
PrintPrintln 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

Attention:{不能单独放在一行,所以以下代码在运行时会产生错误:

package main

import "fmt"

func main()  
{  // 错误,{ 不能在单独的行上
    fmt.Println("Hello, World!")
}

关于包:

关于包,在本地测试得到以下几点

  • 文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
  • 同一个文件夹下的文件只能有一个包名,否则编译报错。

测试:

文件结构:

Test
--helloworld.go

myMath
--myMath1.go
--myMath2.go

测试代码:

// helloworld.go
package main

import (
	"./myMath"
	"fmt"
)

func main() {
	fmt.Println("Hello World!")
	fmt.Println(mathClass.Add(1, 1))
	fmt.Println(mathClass.Sub(1, 1))
}
// myMath1.go
package mathClass

func Add(x int, y int) int {
	return x + y
}
// myMath2.go
package mathClass

func Sub(x int, y int) int {
	return x - y
}

Go标记

Go程序可以由多个标记组成,可以是关键字、标识符、常量、字符串和符号等。如以下程序由6个标记组成:

fmt.Printf("Hello World!")

6个标记分别是这些

1. .fmt
2. .
3. Printf
4. (
5. "Hello World!"
6. )

行分隔符

在Go程序中,一行代表一个语句结束,每一个语句不需要像C家族的语言中添加分号,如果打算将多个语句写在同一行,它们则必须使用 ; 以人为区分,实际开发中并不鼓励这种做法。

This is am example:

fmt.Println("Hello, World!")
fmt.Println("Hello, Golang!")

注释

注释的内容不会被编译,单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾。如:

// 单行注释
/*
 Author by fishcanf1y
 我是多行注释
 */

标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

以下是有效的标识符:

mahesh   kumar   abc   move_name   a_123
myname50   _temp   j   a23b9   retVal

以下是无效的标识符:

  • 1ab(以数字开头)
  • case(Go 语言的关键字)
  • a+b(运算符是不允许的)

字符串链接

Go语言的字符串连接可以通过+来实现:

package main

import "fmt"

func main() {
	fmt.Println("Hello" + "Google")
}

关键字

以下列举Go代码中会使用到的25个关键字或保留字:

Keywords Description
break 终止最内层的for或switch语句
default switch语句中的默认分支
func 定义函数
interface 定义接口
select 多路复用操作
case switch语句的分支
defer 延迟执行
go 启动新的goroutine
map 映射类型
struct 结构体定义
chan 通道类型
else if-else语句中的备选分支
goto 无条件跳转到标签
package 包声明
switch 分支控制结构
const 常量定义
fallthrough 继续执行下一case或default
if 条件判断
range 迭代操作
type 类型定义
continue 跳过当前循环,继续下一次循环
for 循环控制结构
import 包引入
return 函数返回
var 变量声明

除以上所介绍的关键字,Go语言还有36个预定义标识符:

Keywords Description
append 添加元素到切片
bool 布尔类型
byte 字节类型
cap 获取切片的容量
close 关闭通道
complex 复数类型
complex64 32位复数类型
complex128 64位复数类型
uint16 无符号16位整数类型
copy 拷贝切片或数组
false 布尔值,假
float32 单精度浮点数类型
float64 双精度浮点数类型
imag 获取复数的虚部
int 整型
int8 8位有符号整数类型
int16 16位有符号整数类型
uint32 无符号32位整数类型
int32 32位有符号整数类型
int64 64位有符号整数类型
iota 常量生成器
len 获取切片或字符串的长度
make 创建并初始化类型
new 分配零值内存
nil 空值
panic 引发运行时错误
uint64 无符号64位整数类型
print 打印输出
println 打印并换行
real 获取复数的实部
recover 恢复panic引起的错误
string 字符串类型
true 布尔值,真
uint 无符号整数类型
uint8 无符号8位整数类型
uintptr 无符号指针类型

Go语言中的空格

在 Go 语言中,空格通常用于分隔标识符、关键字、运算符和表达式,以提高代码的可读性。
Go 语言中变量的声明必须使用空格隔开,如:

var x int
const Pi float64 = 3.14159265358979323846

在运算符和操作数之间要使用空格能让程序更易阅读

无空格:

fruit=apples+oranges;

在关键字和表达式之间要使用空格。

例如:

if x > 0 {
    // do something
}

在函数调用时,函数名和左边等号之间要使用空格,参数之间也要使用空格。

例如:

result := add(2, 3)

格式化字符串

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

Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。
Printf 根据格式化参数生成格式化的字符串并写入标准输出。

Sprintf示例:

package main

import (
    "fmt"
)

func main() {
   // %d 表示整型数字,%s 表示字符串
    var stockcode=123
    var enddate="2025-07-11"
    var url="Code=%d&endDate=%s"
    var target_url=fmt.Sprintf(url,stockcode,enddate)
    fmt.Println(target_url)
}

输出结果为:

Code=123&endDate=2025-07-11

Printf示例:

package main

import (
	"fmt"
)

func main() {
	var stockcode = 123
	var enddate = "2025-07-11"
	var url = "Code=%d&endDate=%s"
	fmt.Printf(url, stockcode, enddate)
}

输出结果为:

Code=123&endDate=2025-07-11

Go基础语法学习笔记
https://zer0ptr.github.io/2025/07/11/Go基础语法学习笔记/
Author
zer0ptr
Posted on
July 11, 2025
Licensed under