104.【GoLang基础】(二)

简介: 104.【GoLang基础】
(2).GO语言变量命名的独特优点

可以在一行中定义多个变量,而Java一行只能定义一个

var name, age string = "李明", "20"
package main // 这里的包一定要写成 main.
import "fmt" // 导入包
func main() { // 主函数
  var name, age string = "李明", "20"
  fmt.Println("姓名: ", name, " 年龄: ", age) // 打印输出如果两个类型想要链接的话,那么用的不是 "+" 号,而是 "," 号
}

2.变量的初始化💥

(1).定义和初始化分离
package main // 这里的包一定要写成 main.
import "fmt" // 导入包
func main() { // 主函数
  //  如果想要同时定义多个不同类型的变量有两种方式。
  var (
    name string //字符串默认为null
    age  int    //整形默认为0
  )
  name = "jsxs"  //初始化
  age = 20  //初始化
  fmt.Println("姓名: ", name, " 年龄: ", age) // 打印输出如果两个类型想要链接的话,那么用的不是 "+" 号,而是 "," 号
}

(2).短变量声明初始化 (语法糖)

Go编译器它可以自动推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。

它可以自动地推导一些类型,但是使用也是有限制的;

  • 定义变量,同时要进行初始化
  • 不能显式的提供数据类型
  • 只能用在函数内部,不能随便到处定义
  • 因为简介灵活的特点: 简短变量声明被广泛的用于大部分局部变量的声明和初始化。
  • 由于使用了:=,而不是复制的=,因此推导声明写法的左值变量必须是没有定义过的变量;若定义过,将会发生编译错错误。

基本语法

变量名 := 值

根据变量名获取类型

fmt.Printf("%T,%T", name, age)
package main // 这里的包一定要写成 main.
import "fmt" // 导入包
func main() { // 主函数
  /**
  *  利用语法糖实现 定义变量的同时并进行初始化
   */
  name := "jsxs"
  age := 20
  fmt.Println("姓名: ", name, " 年龄: ", age) // 打印输出如果两个类型想要链接的话,那么用的不是 "+" 号,而是 "," 号
  fmt.Printf("%T,%T", name, age)          //根据变量名查看数据类型
}

package main // 这里的包一定要写成 main.
import "fmt" // 导入包
func main() { // 主函数
  /**
  *  利用语法糖实现 定义变量的同时并进行初始化
   */
  var name string = "45"
  var name1 string = "456"
  name := "jsxs" // no new variables on left side of :=
  age := 20
  fmt.Println("姓名: ", name, " 年龄: ", age, name1) // 打印输出如果两个类型想要链接的话,那么用的不是 "+" 号,而是 "," 号
  fmt.Printf("%T,%T", name, age)                 //
}

3.理解变量 (内存地址)

占位符 %T 查看类型,
占位符 %d 查看整形值,
占位符 %p 查看地址 &取地址
package main // 这里的包一定要写成 main.
import "fmt" // 导入包
func main() { // 主函数
  num := 10
  fmt.Printf("num:%d,内存地址: %p", num, &num) //占位符 %T 查看类型, 占位符 %d 查看整形值, 占位符 %p 查看地址 &取地址
  num1 := 100
  fmt.Printf("num1:%d,内存地址: %p", num1, &num1) //占位符 %T 查看类型, 占位符 %d 查看整形值, 占位符 %p 查看地址 &取地址
}

4.变量的交换 💥

Go语言底层帮助我们实现了变量交换,我们只需要进行简单操作即可

a, b, c = c, b, a // Go语言底层帮助我么实现了。
package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
func main() { // 主函数
  /*
    变量交换----- 其他语言 C C++ Java
    a=100; b=200; temp=0;
    temp=a; a=b; b=temp;
  */
  var a int = 100
  var b int = 200
  fmt.Println("交换前: a: ", a, "b ", b)
  a, b = b, a  // Go语言底层帮助我么实现了。
  fmt.Println("交换后: a: ", a, "b: ", b)
}

5.匿名变量💥

匿名变量的特点是一个下划线"“,”"本身就是一个特殊的标识符,被称为空白标识符,它可以像其他标识符那样用于变量的声明或复制(任何类型都可以赋值给他),但任何赋值给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用使用这个标识符作为变量对其它变量进行赋值运算使用匿名变量时,只需要在变量声明的地方使用下划线替换即可

func test() (int, int) { // 第一个括号负责传参,第二个括号负责返回
  return 100, 200
}
package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
func test() (int, int) { // 第一个括号负责传参,第二个括号负责返回
  return 100, 200
}
func main() { // 主函数
  a, b := test() //因为会返回两个值,我们接受一下
  fmt.Println(a, b)
  c, _ := test() //返回值有很多,但我们只想要返回值的某一个值。那么我们就是用匿名变量_ 进行接取
  fmt.Println(c)
  _, d := test() //返回值有很多,但我们只想要返回值的某一个值。那么我们就是用匿名变量_ 进行接取
  fmt.Println(d)
}

在编码过程中,可能会遇到没有名称的变量,类型或方法,虽然这不是必须的,但有时候这些做可以极大地增强代码地灵活性,这些变量称为匿名变量。

匿名变量不占用内存空间,不会分配内存,匿名变量与匿名变量之间也不会因为多次声明而无法使用

6.变量的作用域

一个变量在程序中都有一定的作用范围,称之为作用域。

了解变量的作用域对我们学习Go语言是比较重要的,因为Go语言会在编译时检查每个变量是否使用过,一旦出现未使用的变量,就会报编译错误。如果不能理解变量的作用域,就有可能会带来一些不明的编译错误。

局部变量

定义在方法之内的变量叫做局部变量。

package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
func main() { // 主函数
  var name string = "jsxs" // 局部变量
  var age int = 20         //局部变量
  fmt.Println(name, age)
}
func aa() {
  fmt.Println(name)  // undefined: name ----报错
}

局部变量的作用域只能在其规定的范围内使用,否则会报错。

全局变量

定义在方法之外的变量称之为全局变量

package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
var name string = "jsxs" // 局部变量
func main() { // 主函数
  var age int = 20 //局部变量
  fmt.Println(name, age)
}
func aa() {
  fmt.Println(name) // undefined: name ----报错
}

全局变量和局部变量相等

当和局部变量和全局变量重名,局部会覆盖全局

package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
var name string = "jsxs" // 局部变量
func main() { // 主函数
  var age int = 20 //局部变量
  name = "liming"
  fmt.Println(name, age)
  aa()
}
func aa() {
  fmt.Println(name)
}

相关文章
|
8月前
|
缓存 并行计算 Go
104.【GoLang基础】(四)
104.【GoLang基础】
34 0
|
8月前
|
大数据 编译器 Go
104.【GoLang基础】(三)
104.【GoLang基础】
61 0
|
8月前
|
存储 编译器 Go
104.【GoLang基础】(七)
104.【GoLang基础】
41 0
|
8月前
|
编译器 Go Windows
104.【GoLang基础】(一)
104.【GoLang基础】
28 0
|
6月前
|
中间件 Go API
|
8月前
|
Java Go 数据安全/隐私保护
104.【GoLang基础】(五)
104.【GoLang基础】
37 0
|
8月前
|
Go
104.【GoLang基础】(八)
104.【GoLang基础】
28 0
|
8月前
|
Go 开发者
104.【GoLang基础】(六)
104.【GoLang基础】
28 0
|
11月前
|
JSON NoSQL 中间件
一起学习Golang开发
一起学习Golang开发
98 0
|
11月前
|
运维 NoSQL 编译器
学习golang(8) 初探:方法
学习golang(8) 初探:方法
64 0