第一课语法简单补充| 豆包MarsCode AI 刷题

167 阅读5分钟

1. golang中变量声明

1.1 使用var关键字

最基本的变量声明方式,使用 var 关键字显式声明变量类型并初始化。且支持类型推导,可以在声明变量时省略类型,编译器会根据初始值推导出变量类型。

var age int = 20
var (
    name string = "All"
    age  int    = 30
)

1.2 使用 := 运算符

在函数内部,可以使用 := 运算符进行短变量声明,这种方式更加简洁,同时支持类型推导。

age := 30

注意 ① 至少有一个新的标识符(即之前未声明的变量)。若已经声明过,则直接用 = 即可。

func main() {
    a := 10
    a := 20  // 错误:重复声明 应该是a = 20

    a, b := 20, 30  // 错误:a 已经被声明而 b 未声明所以应该是 b := 30

    c := 40
    a, c := 50, 60  // 正确:c和a被重新赋值
}

注意 ② 在一个代码块内,不能使用 := 重新声明已经声明过的变量。(通常是一个函数:包括if函数、for函数)

func main() {
    if a := 10; a > 5 {
        fmt.Println(a)  // 输出: 10
    }

    // a 在这里不可见
    // fmt.Println(a)  // 错误:未定义的标识符 'a'
}

1.3 零值初始化

若没有显式初始化,变量会被自动初始化为其类型的零值。

var name string  // 默认值为 ""
var age int      // 默认值为 0

1.4 常量声明

虽然严格来说常量不是变量,但在声明和使用上有相似之处。常量使用 const 关键字声明。

const pai float64 = 3.14159

1.5 匿名变量

在某些情况下,你可能不需要使用某个返回值,可以使用匿名变量 _ 来忽略它。

a, _ := strconv.Atoi("42")

golang中三个打印函数的区别

  • print 将参数按原样输出,不添加任何额外的格式或换行符。
  • println 将参数按原样输出,并在末尾添加一个换行符。
  • printf 根据格式化字符串将参数输出,并支持各种格式化选项。
package main

import "fmt"

func main() {
    print("Hello, ")  // 输出: Hello,
    print("world!")   // 输出: world!
    println("This is a new line.")  // 输出: This is a new line.
}
格式化选项
  • %v:默认格式。
  • %T:显示变量的类型。
  • %d:十进制整数。
  • %x:十六进制整数。
  • %f:浮点数。
  • %t:布尔值。
  • %s:字符串。
  • %q:双引号括起来的字符串,包含转义字符。
  • %p:指针地址。
  • %c:字符。
  • %e:科学计数法。
  • %b:二进制表示。
  • %o:八进制表示。

2. 指针

  1. add2() 函数
    • 当调用 add2(n) 时,传递给函数的实际参数 n 的副本会被创建,并在函数内部修改。
    • 因此,在 main() 函数中,所以只是对局部变量的操作,不影响全局变量 n 的值
  2. add2ptr() 函数
    • 当调用 add2ptr(&n) 时,传递给函数的是变量 n 的地址。
    • 函数内部通过解引用 *n 来访问实际的变量 n 并对其进行修改。
    • 因此,在 main() 函数中,原始变量 n 的值会被更新。所以全局变量被修改了
func add1(n int) {
	n += 2
}

func add2(n *int) {
	*n += 2
}

func main() {
	n := 5
	add1(n)
	fmt.Println(n) //5
	add2(&n)
	fmt.Println(n) //7
}

3. 包的依赖管理

3.1 go mod

Go 1.11 版本引入了 go mod,用于管理项目的依赖关系。通过 go mod,可以生成和维护 go.mod 文件,记录项目的依赖关系。

go mod init myproject
go mod tidy
module myproject

go 1.16

require (
    github.com/gorilla/mux v1.8.0
    github.com/someuser/somelibrary v1.0.0
)
  • ①避免循环依赖 包之间不应存在循环依赖,否则会导致编译错误。可以通过重构代码或引入中间包来解决循环依赖问题。

  • ②保持依赖最小化 尽量减少不必要的包依赖,只引入真正需要的包,以提高代码的可维护性和性能。

  • ③遵循包的命名规范 包名应该简洁明了,通常使用小写字母,避免使用下划线或驼峰命名

3.2 go sum

go.sum 文件是一个非常重要的文件,用于记录项目依赖的完整哈希值。这个文件确保了项目在不同环境中构建时所使用的依赖版本和内容的一致性 go.sum 文件包含多行记录,每行记录对应一个依赖包的哈希值。每一行的格式如下:

<module path> <version> <hash>

字段解释

  • <module path> :依赖包的模块路径,例如 github.com/gorilla/mux
  • <version> :依赖包的版本,例如 v1.8.0
  • <hash> :依赖包的哈希值,用于验证依赖包的内容是否被篡改 例如:
github.com/gorilla/mux v1.8.0 h1:qI+gZVz1uJwW+O0lRjYQyF0wK2PjHqf5cF8uGQs+UWw=
github.com/gorilla/mux v1.8.0/go.mod h1:Qm1o5Qk8rXN0zDZfMfQj4xLZdP7tBp52b05V7gTJf5g=

注意事项

  • 不要手动编辑:通常不要手动编辑 go.sum 文件,因为这可能会导致依赖验证失败。
  • 提交到版本控制系统:建议将 go.sum 文件提交到版本控制系统(如 Git),以确保团队成员在不同环境中构建项目时使用相同的依赖版本。
  • 使用 go mod tidy 命令重新生成和更新文件:若删除了 go.sum 文件或修改了依赖,可以使用 go mod tidy 命令重新生成和更新 go.sum 文件。

4. 总结:

第一课笔记作本人忽略或易混淆的基础补充:分别对变量的声明三个打印函数指针包的依赖与管理进行简单补充与说明,以便后续更好掌握go的基础语法和开发