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)
}

相关文章
|
缓存 并行计算 Go
104.【GoLang基础】(四)
104.【GoLang基础】
114 0
|
监控 安全 Go
|
IDE Java Go
Golang
【6月更文挑战第26天】
178 1
|
存储 人工智能 安全
阿里云oss简介和如何对接使用
阿里云对象存储服务(Alibaba Cloud Object Storage Service,简称OSS)是阿里云提供的一种安全、稳定、高效的对象存储服务。它支持多元数据存储、持久化存储和共享访问,并且具有无限的扩展性和备份恢复能力。阿里云OSS适用于各类场景,如云计算、大数据分析、人工智能等,并且具备高可用性、高可扩展性和低成本等优势。
15417 2
|
4天前
|
云安全 监控 安全
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1091 6
|
11天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
717 42

热门文章

最新文章