1、定义变量
Go 没有单独的“声明关键字”,而是用 var 或短变量声明 :=:
package main
import "fmt"
func main() {
var x int = 5 // 显式类型
y := "cjavapy" // 类型推断(只能在函数内)
fmt.Println(x)
fmt.Println(y)
}与 Python 不同:Go 变量的类型在声明时就固定,不能把 int 变量变成 string。要“改变类型”,请新建变量或做类型转换。
x := 4 // x 是 int
// x = "text" // ❌ 编译错误:不能把 string 赋给 int
text := "cjavapy is website" // ✅ 新变量
fmt.Println(x, text)字符串字面量可用双引号或反引号(原样字符串,不转义):
s1 := "Python"
s2 := `cjavapy`2、变量名(命名规则)
1)只能使用字母、数字、下划线,且不能以数字开头
2)区分大小写(myVar 与 myvar 不同)
3)不要使用关键字(如 package、func、var 等)
4)包外可见(导出):首字母大写;包内私有:首字母小写
5)建议使用 camelCase,避免混淆的 l、O6)示例
// ✅ 合法
var myvar = "marry"
var my_var = "cjavapy"
var _myVar = "cjavapy"
var myVar = "cjavapy"
var MYVAR = "cjavapy"
var myvar2 = "cjavapy"
// ❌ 非法
// var 2myvar = "cjavapy"
// var my-var = "cjavapy"
// var my var = "cjavapy"3、单行多个变量赋值
Go 支持并行赋值与多变量声明:
x, y, z := "c", "python", "java"
fmt.Println(x, y, z)
a := b := "Python" // ❌ 不合法(Go 没有链式 :=)
a, b, c := "Python", "Go", "Rust" // ✅将相同值赋给多个变量:
x, y, z := "Python", "Python", "Python"需要“占位不用”的变量,可用 空标识符 _:
left, _, right := 1, 2, 34、输出变量与字符串拼接
使用 fmt 包,Go 语言中的 fmt 包 是最常用的标准库之一,主要用于格式化输入与输出(formatted I/O),类似于 C 语言中的 printf、scanf 等函数。
import (
"fmt"
"strconv"
)
func main() {
x := "cjavapy"
fmt.Println("Python " + x) // 字符串拼接
s1 := "Python "
s2 := "cjavapy"
z := s1 + s2
fmt.Println(z)
// 数字相加
n, m := 5, 10
fmt.Println(n + m) // 15
// 不能直接把数字与字符串相加(需转换)
// fmt.Println(5 + "cjavapy") // ❌ 编译错误
fmt.Println(strconv.Itoa(5) + " cjavapy") // 转字符串
fmt.Printf("%d %s\n", 5, "cjavapy") // 格式化输出
}5、局部变量(函数作用域)
在函数内部定义的变量,只在该函数内可见,函数返回后被回收;不同函数里同名变量互不影响。
package main
import "fmt"
func demo1() {
num := 10
fmt.Println(num)
num = 20
fmt.Printf("修改后 %d\n", num)
}
func demo2() {
num := 100
fmt.Println(num)
}
func main() {
demo1()
demo2()
}6、包级(全局)变量
在函数外部定义的变量称为包级变量,同一包内的任意文件/函数都可使用;首字母大写可被其它包导入访问。
package main
import "fmt"
var x = "cjavapy" // 包级变量(全局)
func myfunc() {
fmt.Println("Python " + x) // 读取包级变量
}
func main() {
myfunc()
fmt.Println("Python " + x)
}若在函数内声明了与包级同名的变量,会遮蔽(shadow)包级变量:
var x = "awesome"
func myfunc() {
x := "cjavapy" // 局部 x,遮蔽外部 x
fmt.Println("Python is " + x) // cjavapy
}
func main() {
myfunc()
fmt.Println("Python " + x) // awesome(包级 x 未变)
}7、如何在函数里改“全局变量”
Go 没有 global 关键字。要修改包级变量,直接赋值即可(前提:不要用 := 重新声明局部同名变量)。
package main
import "fmt"
var x = "js" // 包级变量
func myfunc() {
// x := "cjavapy" // ❌ 这会新建局部变量,遮蔽包级 x
x = "cjavapy" // ✅ 正确:修改包级变量
}
func main() {
myfunc()
fmt.Println("c java python is " + x) // cjavapy
}