Golang 中定义变量三种格式

Golang 中定义变量三种格式

// 标准格式
var 变量名称 数据类型 =;

// 自动推导类型格式
var 变量名称 =;

// 简短格式(golang官方推荐格式)
变量名称 :=;
package main

import "fmt"

func main() {
	var num1 int // 先定义
	num1 = 10    // 后赋值
	fmt.Println("num1 ======================== ", num1)

	var num2 int = 20 // 定义的同时赋值
	fmt.Println("num2 ======================== ", num2)

	var num3 = 30 // 定义的同时赋值, 并省略数据类型
	fmt.Println("num3 ======================== ", num3)

	num4 := 40 // 定义的同时赋值, 并省略关键字和数据类型
	/*
		num4  := 40 等价于
		var num4 int
		num4 = 40
	*/
	fmt.Println("num4 ======================== ", num4)
}
wgchen@wgchen-virtual-machine:~/桌面/test$ go run .
num1 ========================  10
num2 ========================  20
num3 ========================  30
num4 ========================  40
wgchen@wgchen-virtual-machine:~/桌面/test$ 

方式一, 连续定义

package main

import "fmt"

func main() {
	var num1, num2 int // 先定义
	num1 = 10          // 后赋值
	num2 = 20
	fmt.Println("num1 = ", num1)
	fmt.Println("num2 = ", num2)

	var num3, num4 int = 30, 40 // 定义的同时赋值
	fmt.Println("num3 = ", num3)
	fmt.Println("num4 = ", num4)

	var num5, num6 = 50, 60 // 定义的同时赋值, 并省略数据类型
	fmt.Println("num5 = ", num5)
	fmt.Println("num6 = ", num6)

	num7, num8 := 70, 80 // 定义的同时赋值, 并省略关键字和数据类型
	fmt.Println("num7 = ", num7)
	fmt.Println("num8 = ", num8)
}

方式二, 变量组

package main

import "fmt"

func main() {
	var ( // 先定义
		num1 int
		num2 float32
	)
	num1 = 10 // 后赋值
	num2 = 3.14
	fmt.Println("num1 = ", num1)
	fmt.Println("num2 = ", num2)

	var ( // 定义的同时赋值
		num3 int     = 30
		num4 float32 = 6.66
	)
	fmt.Println("num3 = ", num3)
	fmt.Println("num4 = ", num4)

	var ( // 定义的同时赋值, 并省略数据类型
		num5 = 50
		num6 = 7.77
	)
	fmt.Println("num5 = ", num5)
	fmt.Println("num6 = ", num6)

	var ( // 一行定义多个
		num7, num8  = 70, 80
		num9, num10 = 9.99, 100
	)
	fmt.Println("num7 = ", num7)
	fmt.Println("num8 = ", num8)
	fmt.Println("num9 = ", num9)
	fmt.Println("num10 = ", num10)
}

Go语言变量定义注意点

简短模式的含义是定义的同时初始化

package main
import "fmt"
func main() {
	num := 10
	num := 20 // 编译报错, 重复定义
	fmt.Println("num = ", num)
}

一定不要把:=当做赋值运算符来使用

package main
import "fmt"
var num = 10 // 定义一个全局变量
func main() {
	num := 20 // 定义一个局部变量
	fmt.Println("num = ", num)
        test()
}
func test() {
	fmt.Println("num = ", num) // 还是输出10
}

:=只能用于定义局部变量,不能用于定义全局变量

package main
import "fmt"
num := 10 // 编译报错
func main() {
	fmt.Println("num = ", num)
}

使用:=定义变量时,不能指定var关键字和数据类型

package main
import "fmt"
func main() {
	//var num int := 10 // 编译报错
	//var num := 10 // 编译报错
	num int := 10 // 编译报错
	fmt.Println("num = ", num)
	fmt.Println("num = ", num)
}

变量组中不能够使用:=

package main
import "fmt"
func main() {
	var(
		num := 10 // 编译报错
	)
	fmt.Println("num = ", num)
}

通过:=同时定义多个变量, 必须给所有变量初始化

package main
import "fmt"
func main() {
	//num1, num2 := 666, 888 // 正确
	num1, num2 := 666 // 报错
	fmt.Printf("%d, %d\n", num1, num2)
}

通过:=同时定义多个变量, 只要任意一个变量没有定义过,都会做退化赋值操作

package main
import "fmt"
func main() {
	// 定义一个变量num1
	num1 := 10
	// 同时定义两个变量num1和num2, 由于num2从来没有定义过,
	// 所以对于num1来说:=退化为赋值运算符, 而对于num2来说:=仍然是定义+赋值
	num1, num2 := 20, 30
	fmt.Println("num1 = ", num1)
	fmt.Println("num2 = ", num2)
}
wgchen@wgchen-virtual-machine:~/桌面/test$ go run .
num1 =  20
num2 =  30
wgchen@wgchen-virtual-machine:~/桌面/test$ 

以下方式报错:

package main
import "fmt"
func main() {
	num1 := 10
	num2 := 20
	// 报错, 因为num1,和num2都已经被定义过
	// 至少要有任意一个变量没有被定义过,才会退化赋值
	num1, num2 := 30, 40
	fmt.Println("num1 = ", num1)
	fmt.Println("num2 = ", num2)
}

定义的局部变量或者导入的包没有被使用, 那么编译器会报错,无法编译运行,但是定义的全局变量没有被使用,编译器不会报错, 可以编译运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其黑、受其白

喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值