使用值传递·modify·所以最好尽量避免用全局变量或者用的时候保证它是只读的
一、使用值传递
在Go语言里,默认的就是用值传递来传参数,意思就是函数里面接收的其实是参数的一个“拷贝”,而不是原本的那个参数。你就算在函数里把“拷贝”改了,也不会影响到原来的那个参数。看个例子: ```go package main import "fmt" func main() { x := 5 modify(x) fmt.Println("原始值:", x) // 输出:原始值: 5 } func modify(x int) { x = 10 } ``` 在这个例子中,函数`modify`接收的是变量`x`的副本,所以即使你改变了它的值,外部的`x`也不会变。
二、使用常量
还有一种方法是使用常量。常量在声明的时候就给了值,而且整个程序运行过程中,它的值都是固定的,不能被修改。这样就能保证它在任何时候都不会变。比如: ```go package main import "fmt" const MAX_INT = 100 func main() { fmt.Println(MAX_INT) // 输出:100 // MAX_INT = 200 // 这行代码会导致编译错误 } ``` 在这个例子中,`MAX_INT`是一个常量,它的值在整个程序运行期间都保持不变,任何尝试修改它的操作都会让编译器报错。
三、避免全局变量
用全局变量虽然挺方便,但它们可能在程序的各个地方被改来改去,这可能会导致一些意外的结果。所以最好尽量避免用全局变量,或者用的时候保证它是只读的。你可以通过封装和控制访问权限来实现这一点。比如: ```go package main import "fmt" var globalVar int = 10 func main() { fmt.Println("全局变量初始值:", globalVar) // 输出:全局变量初始值: 10 // setGlobalVar(globalVar + 1) // 这行代码会导致编译错误 } func setGlobalVar(value int) { globalVar = value } ``` 在这个例子中,`globalVar`是一个全局变量,但是由于我们没有提供修改它的函数,所以它的值就不会被意外地修改。 使用值传递、使用常量、避免全局变量是保证Go语言中参数不被改变的三大方法。其中,使用值传递是最常见也是最有效的方式,因为它能确保函数内部的修改不会影响到原始参数。掌握了这些方法,你就能写出更加安全可靠的Go代码。