目录
1、值类型变量
所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值。
=
&i0xc00000a0a0
package main
import "fmt"
func main() {
var a = 10
var b = a
fmt.Println("a=", a)
fmt.Println("b=", b)
fmt.Println("a=", &a)
fmt.Println("b=", &b)
}
//输出结果为
a= 10
b= 10
a= 0xc000014098
b= 0xc0000140b0
2、引用类型
Go 没有引用传递,都是值传递
复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存
Golang 中引用类型:指针,slice,map,channel,接口,函数等。变量存放的是一个内存地址值,这个地址值指向的空间存的才是最终的值。内存通常在堆中分配,当没有任务变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,通过 GC 回收。
package main
import "fmt"
//类
type Car struct {
number int
}
//引用类型的变量
func main() {
//创建对象c1
c1 := new(Car)
c1.number = 10
//创建对象c2
c2 := new(Car)
c2 = c1
c2.number = 20
fmt.Println("c1.number=", c1.number)
fmt.Println("c2.number=", c2.number)
fmt.Println("c1.number=", &c1.number)
fmt.Println("c2.number=", &c2.number)
}
//输出结果为
c1.number= 20
c2.number= 20
c1.number= 0xc000014098
c2.number= 0xc000014098
3、空白标识符
Golang 中不允许变量声明了但不使用。既然不想使用,何必声明变量呢,那就将变量用空白符代替,反正空白符就是用来抛弃的。
package main
import "fmt"
func main() {
str1,str2,str3,str4 := test()
fmt.Println("str1=",str1,"\nstr2=",str2,"\nstr3=",str3,"\nstr4=",str4)
}
func test() (int,float64,bool,string) {
a,b,c,d := 20,30.5,true,"hello"
return a,b,c,d
}
输出结果为:
str1= 20
str2= 30.5
str3= true
str4= hello
上面的代码如果我们不想要输出第一个参数怎么办呢?
package main
import "fmt"
func main() {
_,str2,str3,str4 := test()
fmt.Println("str2=",str2,"\nstr3=",str3,"\nstr4=",str4)
}
func test() (int,float64,bool,string) {
a,b,c,d := 20,30.5,true,"hello"
return a,b,c,d
}
//输出结果为:
str2= 30.5
str3= true
str4= hello