Go速成无压力【四】:变量(variables)

(一)变量的定义

变量的定义可以使用关键字var进行定义,写法是var 变量 类型,比如var i int定义i为int类型的变量

1,定义并输出变量实例演示

定义为int类型,并没有给予具体的数值时,输出为 0

package main

import "fmt"

func main() {
	var i int
	fmt.Println(i)
}

在这里插入图片描述

2,定义但未指定数值类型时的情况

定义为bool型,但是在main函数中没有给予具体的类型定义时就会输出false

在这里的 i 在main函数中被给予了数值类型了,但是x,y没有被给予数值类型,输出的时候x和y均为false

package main

import "fmt"

var i, x, y bool

func main() {
	var i int
	fmt.Println(i, x, y)
}

在这里插入图片描述

3,定义的变量必须被使用

定义的变量必须被使用,否则会报错

package main

import "fmt"

func main() {
	var i int
	fmt.Println()
}

在这里插入图片描述

4,定义变量不写类型

如果定义了变量不写类型,变量被初始化的时候该变量的类型会被进行隐式转换

扫描二维码关注公众号,回复: 11316426 查看本文章

这里的变量被隐式转换为了string类型 (使用fmt.Printf()进行打印,%T可以输出变量类型)

package main

import "fmt"

var a = "今天天气很好!"

func main() {
	fmt.Printf("该变量的类型为:%T ;该变量的值为:%v", a, a)
}

在这里插入图片描述


(二)变量的赋值

在Go中变量的赋值有两种符号可以使用 =:=

= 符号赋值的情况

1,单个变量赋值

package main
import "fmt"
func main(){
	var a int = 1
	fmt.Println("a的值为:",a)
}

在这里插入图片描述

2,多个变量赋值

package main

import "fmt"

func main() {
	var a, b int = 1, 3001
	var x, y, z = "我是X", 30, true
	fmt.Println(a, b, x, y, z)
}

在这里插入图片描述

:= 符号赋值的情况

:= 用于在函数中对变量进行赋值,是一种简短声明的语法,类型可以不写,因为会进行隐式转换,使用:= 赋值的变量会被自动赋予类型

package main
import main
func main(){
	a := "今天天气很好!"
	fmt.Println(a)
}

在这里插入图片描述

警告!如果这种变量短声明使用在函数外面会报错,:= 的写法必须位于函数内部

在这里插入图片描述

相反的,= 定义的变量可以声明在函数外面且正常输出
在这里插入图片描述
在这里插入图片描述


(三)基本类型

Go语言的基本类型有

基本类型
bool
string
int, int8 ,uint16 ,uint32 ,uint64 ,uintptr
byte (uint8的别名)
rune (int32的别名)
float32 , float64
complex64 ,complex128

下面这个程序是Golang官网的一个案例,我们来看下输出了啥

package main

import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
	fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
	fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
	fmt.Printf("Type: %T Value: %v\n", z, z)
}

在这里插入图片描述
注意到上面的变量的定义没有,可以进行分步定义(因式分解factored),写到块里面,比如这段

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

传统定义是

var ToBe   bool   = false
var	MaxInt uint64 = 1<<64 - 1
var	z  complex128 = cmplx.Sqrt(-5 + 12i)

int,uint和uintptr类型在32位系统上通常为32位宽,在64位系统上为64位宽。 当你需要整数值时,应该使用int,除非有特殊原因要使用大小或无符号整数类型。


(四)0 值变量 (zero variable)

变量的初始化值如果没有给予一个值,将会被自动赋予 0 值 , 字符串会变成空字符串 " " , bool型会显示false

package main

import "fmt"

func main() {
	var x int
	var y float32
	var z string
	var a bool
	fmt.Printf("%v , %v , %q , %v", x, y, z, a)
}

在这里插入图片描述


(五)类型转换

类型转换的写法是 T(v) ,T代表类型,v表示遍历,比如:int(a)将a转化为整型

package main

import "fmt"

func main() {
	var a float32 = 12312.89
	fmt.Printf("改变前:a is %v and this type is %T \n", a, a)
	fmt.Printf("改变后:a is %v and this type is %T", int(a), int(a))
}

在这里插入图片描述


(六)类型推断

被定义了类型的变量赋值给另外一个变量的时候,会将类型一并继承下去

package main
import "fmt"

func main(){
	var b float64 = 78.1200
	a := b
	fmt.Printf("a 的值是%v ,类型是 %T",a,a)
}

在这里插入图片描述


(七)常量 (constant)

常量的定义使用关键词 const 定义

package main

import "fmt"

const str1 = "今天天气同样的美好!"

func main() {
	const str2 = "today same wonderful like yesterday !"
	fmt.Println("今天天气如何?//  ", str1, "\nHow about today ? //", str2)
}

在这里插入图片描述

无类型数值常量的类型定义取决于该常量的使用

package main
import "fmt"
func main(){
	const(
		a = 1010
		b = 12
	)
	fmt.Printf("a的类型为:%T",a*10.12)
	fmt.Printf("a的类型为:%T",a*1000)
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41136216/article/details/106599165