辽宁双高建设专题网站,可以做游戏可以视频约会的网站,超链接到网站怎么做,大家都用哪个网站做读书笔记标识符与关键字 在任何编程语言中#xff0c;标识符和关键字都是核心概念#xff0c;Go也不例外。标识符用于命名各种类型的代码元素#xff0c;如变量、常量、函数等。关键字是预留的词汇#xff0c;用于指示编程语言的特定操作。在本部分中#xff0c;我们将详细介绍Go语…标识符与关键字 在任何编程语言中标识符和关键字都是核心概念Go也不例外。标识符用于命名各种类型的代码元素如变量、常量、函数等。关键字是预留的词汇用于指示编程语言的特定操作。在本部分中我们将详细介绍Go语言中的标识符和关键字。
Go中的标识符
标识符是用于标识各种程序实体例如变量、函数、类型等的名称。在Go中标识符遵循以下规则
必须以字母或下划线_开头。可以包含字母、数字和下划线_。区分大小写。
例如以下都是有效的Go标识符
name
_x9
go_variable
Count123以下是无效的标识符
9name // 以数字开头
!var // 包含非法字符Go关键字
Go语言有25个预留的关键字不能用作标识符。以下是这些关键字的列表以及它们的简要解释
break 用于中断循环或switch语句
default 用于switch语句表示默认情况
func 定义新的函数
interface 定义接口
select 用于处理多个通道
case 用于switch和select语句中的条件分支
defer 用于确保函数调用在程序执行结束后发生
go 用于并发执行
map 定义map类型
struct 定义结构体
chan 定义通道类型
else 用于if-else结构
goto 用于无条件跳转
package 定义包
switch 用于多路分支
const 定义常量或常量组
fallthrough 用于switch语句使得控制流穿透到下一个case
if 条件语句
range 用于循环遍历数组、切片、字符串、map或通道
type 定义新的数据类型或类型别名
continue 跳过当前循环的剩余部分开始下一次迭代
for 循环语句
import 导入包
return 从函数返回
var 声明变量关键字示例
// 使用if-else关键字
if x 10 {fmt.Println(x is greater than 10)
} else {fmt.Println(x is not greater than 10)
}// 使用for关键字
for i : 0; i 5; i {fmt.Println(i)
}// 使用func和return关键字
func add(a int, b int) int {return a b
}具名的函数 在Go语言中函数是一组执行特定任务的代码块具名函数即是有名称的函数。本文将详细讨论Go中各类具名函数包括常规函数、方法、高阶函数、匿名函数和闭包。
常规函数
这是最基础的函数类型。常规函数具有名称可以接受参数并且可以返回值。
代码示例
// 常规函数接受两个int类型参数返回int类型值
func add(a int, b int) int {return a b
}方法
在Go中方法是一种特殊类型的函数它作用于特定类型的变量这个特定类型称为接收者。
代码示例
type Circle struct {Radius float64
}// Circle类型的方法计算圆的面积
func (c Circle) Area() float64 {return 3.14159 * c.Radius * c.Radius
}高阶函数
高阶函数是接受函数作为参数或返回一个函数的函数。
代码示例
// 高阶函数接受一个函数作为参数
func applyFunc(f func(int) int, value int) int {return f(value)
}匿名函数与Lambda表达式
匿名函数是没有名字的函数通常用于临时操作。
代码示例
// 匿名函数
add : func(a, b int) int {return a b
}闭包
闭包是一个函数值它引用了其函数体之外的变量。简单来说这个函数“记住了”这些引用的变量。
代码示例
// 闭包示例
func outer() func() int {x : 0return func() int {xreturn x}
}具名的值 在Go语言中具名的值主要包括变量和常量。这些都是用于存储数据或代表特定值的标识符。接下来我们会分别探讨变量和常量的各种类型和用法。
变量
变量是用于存储数据的容器。在Go中变量的声明有多种方式并且支持多种数据类型。
基本数据类型
Go支持一系列基本的数据类型包括整数、浮点数、布尔值、字符串等。
var i int 10 // 整数
var f float64 10.5 // 浮点数
var b bool true // 布尔值
var s string hello // 字符串复合数据类型
Go还提供了数组、切片、映射Map、结构体Struct等复合数据类型。
var arr [3]int [3]int{1, 2, 3} // 数组
var slice []int []int{1, 2, 3} // 切片
var m map[string]int map[string]int{a: 1, b: 2} // 映射
type Person struct {Name string; Age int} // 结构体指针类型
Go语言也支持指针但不支持指针运算。
var p *int
i : 42
p i常量
与变量不同常量是不可变的值一旦声明就不能更改。
基本常量类型
const pi float64 3.14159 // 浮点数常量
const str string Hello // 字符串常量
const b bool true // 布尔常量枚举常量
在Go中可以使用iota关键字生成一组增量的整数常量通常用于枚举。
type Weekday int
const (Sunday Weekday iotaMondayTuesday
)常量表达式
Go支持常量表达式允许用于计算的常量值在编译期间进行运算。
const x 2 3定义类型和类型别名
Go语言不仅提供了一系列内建类型还允许通过type关键字定义新的类型或为现有的类型创建别名。这两者在语法上可能相似但在类型系统中有不同的意义和用途。本篇文章旨在详细介绍定义类型和类型别名的各种情况。
类型定义Type Definition
通过类型定义你可以创建一个全新的类型尽管它可能与某个现有类型在结构上完全相同。
基础类型
下面是如何定义一个基于int的新类型MyInt
type MyInt int复合类型
也可以基于复合类型来定义新类型
type MyMap map[string]int
type Person struct {Name stringAge int
}接口类型
你还可以定义接口类型它包含了一组方法签名
type Writer interface {Write([]byte) (int, error)
}类型别名Type Alias
类型别名并不创建新类型只是为现有类型创建一个新名字。
type Integer int类型定义与类型别名的区别
类型定义和类型别名在Go中有着本质的区别。
类型定义会创建一个全新的类型它与其基础类型在类型系统中是完全不同的。类型别名只是创建了一个新名称但并没有创建新类型。
代码示例
type MyInt int
type YourInt intvar a int
var b MyInt
var c YourInta 1
b MyInt(a) // 需要显式转换
c a // 不需要转换因为YourInt只是int的别名包和模块管理 Go语言通过包Packages和模块Modules来组织和管理代码。这两者虽然在目的上有些许相似但在用法和规模上各有特点。在本篇文章中我们将深入探讨Go中的包和模块管理以及如何高效地使用它们。
包Packages
包是Go语言代码组织的基本单位。每个Go程序都是由包组成的包用于封装代码以实现可重用和可维护。
标准库包
Go语言提供了丰富的标准库例如 fmt, net/http, io 等。
import fmtfunc main() {fmt.Println(Hello, world!)
}自定义包
你也可以创建自定义的包。通常情况下每个文件夹就是一个单独的包。
例如创建一个名为 mathutils 的包
// mathutils/add.go
package mathutilsfunc Add(a, b int) int {return a b
}使用自定义包
import mathutilsfunc main() {sum : mathutils.Add(1, 2)
}包的可见性
在Go中以大写字母开头的函数或变量在包外是可见的Public以小写字母开头的则不是Private。
模块Modules
模块是包的集合。Go 1.11版本引入了模块的概念旨在解决依赖管理问题。
初始化模块
使用 go mod init 初始化一个新模块。
go mod init mymodule这将生成一个 go.mod 文件其中列出了模块名和依赖。
添加依赖
当你导入一个新的包并运行 go build 或 go get依赖将自动添加到 go.mod 文件。
升级和降级依赖
你可以使用 go get 命令升级或降级模块依赖。
go get -u example.com/some/modulev1.2.3代码块与断行
在Go编程中理解如何有效地使用代码块和断行是编写可读、可维护代码的基础。在本篇文章中我们将深入了解Go语言中各种类型的代码块和断行规则。
代码块Code Blocks
代码块是由一对大括号{}包围的代码序列。这些代码块在不同的语境中有不同的作用。
函数体
最常见的代码块是函数体它包含函数的实现。
func sayHello() {fmt.Println(Hello!)
}控制结构
if、for、switch 等控制结构也使用代码块。
if true {fmt.Println(This is true.)
}for i : 0; i 3; i {fmt.Println(i)
}声明块
常量和变量也可以在块内声明。
const (Pi 3.14E 2.71
)断行Line Breaks
Go语言相对宽松的断行规则让你可以在多数表达式和声明中自由地添加空白和换行。
语句结束
在Go中大多数语句通过换行符或者分号来结束。
fmt.Println(This is the end of the statement)长语句的断行
对于较长的语句Go允许在操作符附近断行。
result : someVeryLongVariable anotherVeryLongVariable -yetAnotherVeryLongVariable函数调用和定义
在函数调用或定义时参数也可以进行断行。
func longFunction(param1 int,param2 string,param3 float64,
) {// 函数体
}