深入浅出golangGoGolang 入门资料+笔记

golang快速入门[8.1]-变量类型、声明赋值、作用域声明周

2020-03-18  本文已影响0人  唯识相链2

前文

题记

前言

我们将在本文中学习到:

变量是什么

变量的数据类型

go语言是静态类型的语言,需要在运行前明确变量的数据类型以及大小。如下图是静态语言与动态语言的区别。动态语言可以在运行时扩展变量的大小。

image

变量的声明与赋值

变量的声明使用var来标识,变量声明的通用格式如下:

var name type = expression
image
var i int
// 外部连续声明var U, V, W float64
// 赋值不带类型,自动推断var k = 0
// 外部连续声明+赋值var x, y float32 = -1, -2
// 外部var括号内部var (    g       int    u, v, s = 2.0, 3.0, "bar")
func main() {    //函数内部的变量声明  声明的变量类型必须使用 否则报错    var x string
// 只限函数内部 自动推断类型y := "jonson"

变量的命名

作用域

全局作用域 > 包级别作用域 > 文件级别作用域 > 函数作用域 > 内部作用域universe block > package block > file block > function block > inner block

全局作用域

內建类型: int int8 int16 int32 int64          uint uint8 uint16 uint32 uint64 uintptr          float32 float64 complex128 complex64          bool byte rune string error內建常量: true false iota nil內建函數: make len cap new append copy close delete          complex real imag          panic recover

包级别作用域

package mainimport "fmt"var x int=5func main(){    fmt.Println("mainx:",x)}
// f1.gopackage mainvar x int//-------------------------------------// f2.gopackage mainfunc f() {  fmt.Println(x)}
//testdemo/destdemo.gopackage testdemoimport "fmt"var Birth uint = 23func Haha(){    fmt.Println("lalalal")}//-------------------------------------package main  // main/scope.goimport (    "testdemo"    "fmt")func main(){    testdemo.Haha()    fmt.Println(testdemo.Birth)}

文件级别作用域

// f1.gopackage mainimport "fmt"//-------------------------------------// f2.go  无效package mainfunc f() {  fmt.Println("Hello World")}

函数级别作用域

func  add(a int,b int)(c int) {  fmt.Println("Hello World")  x := 5  fmt.Println(x)}

内部作用域

//下面的代码无效:func main() {  fmt.Println("Hello World")  fmt.Println(x)    x := 5}
//下面的代码无效2:func main() {  fmt.Println("Hello World")  x := 5  fmt.Println(x)}//func test(){    fmt.Println(x)}
package mainimport "fmt"var x int=5func test(){    var x int = 99;    x = 100;    // 下面的代码输出结果为: 100    fmt.Println("testx",x)}
func main() {    fmt.Println("Hello World")  // scope1    {                           // scope2        x := 5                  // scope3        fmt.Println(x)          // scope4    }                           // scope5}

变量的内存分配

我们在前文go语言是如何运行的-内存概述 与 go语言是如何运行的-内存分配 中,详细介绍了在虚拟内存角度其不同的及其功能

image
// main.gopackage mainvar aaa int64 = 8var ddd int64func main() {}
$ go tool compile -S main.go..."".aaa SNOPTRDATA size=8        0x0000 08 00 00 00 00 00 00 00"".ddd SNOPTRBSS size=8...
func main() {    var vvv  = [5]int{1,2,3,4,5}    var bbb string = "hello"}
$ go tool compile -S main.go...go.string."hello" SRODATA dupok size=5    0x0000 68 65 6c 6c 6f                                   hellotype.[5]int SRODATA dupok size=72"".ddd SNOPTRBSS size=8...

总结

参考资料

image

唯识相链启用微信交流群(Go与区块链技术)

欢迎加微信:ywj2271840211

上一篇下一篇

猜你喜欢

热点阅读