Go语言基础——01 注释、变量、常量

Go语言基础——01 注释、变量、常量

注释

什么是注释?为什么我们要写注释?

注释:顾名思义,解释代码的文字。用来描述我们当前写的代码是做什么的。
一个项目,由多个部分组成。随着时间的推移,我们可能会忘记自己写的代码是什么意思,或在多人协作时,直接读懂别人的代码可能是比较困难的,这时如果我们能在写代码的时候,用一段文字来描述当前代码的意思,那么会使整个协作开发变得容易起来,能快速理解代码的意思。
在Go语言中注释的方法由两种:

  • 单行注释(//)
  • 多行注释(块注释)(/**/)
package main

import "fmt"

// 单行注释
func main() {
	/*
		多行注释
	*/
	fmt.Println("hello,world!")
}

注意:注释不会被编译

变量

变量的定义

  • 变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。
  • 变量可以通过变量名访问。
  • 在Go语言中变量名由字母、数字、下划线组成,其中首个字符不能为数字。

变量的声明

声明变量的一般形式是使用 var 关键字
var 变量名 类型
可以同时声明多个变量
var identifier1, identifier2 type

  • 第一种,指定变量类型,如果没有初始化,则变量默认为零值。
package main

import (
	"fmt"
	"time"
)

func main() {
	// 声明变量,没有初始化,变量默认为零值
	// 零值:变量没有做初始化时系统默认设置的值
	// 数值类型(包括complex64/128)为 0
	// 数值类型(包括complex64/128)为 0
	// 字符串为 ""(空字符串)
	// 以下几种类型为 nil:
	/*
		var a *int
		var a []int
		var a map[string] int
		var a chan int
		var a func(string) int
		var a error // error 是接口
	*/
	var addr string
	fmt.Println(addr)
	
	var phone string = "12200000000"
	fmt.Println(phone)

	var name string
	name = "name1"
	fmt.Println(name)

	var age, salary int
	age = 11
	salary = 1000
	fmt.Println(age, salary)

	var (
		sex      string
		birthday time.Time
	)
	sex = "男"
	birthday = time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
	fmt.Println(sex, birthday)
}
  • 第二种,根据值自行判定变量类型。
package main

import "fmt"

func main() {
	var name = "name1"
	var age = 12
	fmt.Println(name, age)
}
  • 第三种,语法糖。
package main

import "fmt"

func main() {
	name := "name1"
	fmt.Println(name)
}

注意:

  • 声明变量的语法:var 变量名 变量类型
  • 语法糖:变量名 := 值,快速定义变量,它会自动推导类型

变量的交换

package main

import "fmt"

func main() {
	var a int = 100
	var b int = 200
	fmt.Println("a: ", a, "  b: ", b)
	var n int
	n = a
	a = b
	b = n
	fmt.Println("a: ", a, "  b: ", b)

	var c int = 1
	var d int = 2
	fmt.Println("c: ", c, "  d:", d)
	c, d = d, c
	fmt.Println("c: ", c, "  d:", d)
}

理解变量

package main

import "fmt"

func main() {
	var a int
	a = 100
	fmt.Printf("a的值:%d,内存地址:%p\n", a, &a) // a的值:100,内存地址:0xc00000e0c8
	a = 200
	fmt.Printf("a的值:%d,内存地址:%p\n", a, &a) // a的值:200,内存地址:0xc00000e0c8

	var str string
	str = "str1"
	fmt.Printf("str的值:%s,内存地址:%p\n", str, &str) // str的值:str1,内存地址:0xc000088220
	str = "str2"
	fmt.Printf("str的值:%s,内存地址:%p\n", str, &str) // str的值:str2,内存地址:0xc000088220

	m := map[int]int{}
	m[1] = 2
	fmt.Printf("m的值:%v,内存地址:%p\n", m, &m) // m的值:map[1:2],内存地址:0xc00000a030
	m[1] = 3
	fmt.Printf("m的值:%v,内存地址:%p\n", m, &m) // m的值:map[1:3],内存地址:0xc00000a030
}

匿名变量

在Go语言中,_ 下划线,代表匿名变量
任何赋值给匿名变量的值都会被丢弃

package main

import "fmt"

func main() {
	// 只想要第一个结果,使用匿名变量 _
	i, _ := test()
	fmt.Println(i)

	// 只想要第二个结果,使用匿名变量 _
	_, i2 := test()
	fmt.Println(i2)
}

func test() (int, int) {
	return 100, 200
}

变量的作用域

  • 全局变量
    在函数体外声明的变量称为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。
  • 局部变量
    在函数体内声明的变量称为局部变量,它们的作用域只在函数体内,参数和返回值也是局部变量
package main

import "fmt"

/* 声明全局变量 */
var c int
var d string = "全局 d"

func main() {
	/* 声明局部变量 */
	var a, b int

	/* 初始化参数 */
	a = 1
	b = 2
	c = a + b
	fmt.Printf("结果:a=%d, b=%d, c=%d\n", a, b, c)

	var d string = "局部 d"
	fmt.Println(d)
}

注意:

  • 全局变量定义的时候无法使用语法糖(:=)创建,必须使用 var 关键字定义。
  • 全局变量和局部变量可以重名
  • 如果全局变量和局部变量重名,优先使用局部变量

常量

常量:广义概念是“不变化的量”。

在Go语言中,使用关键字 const 来定义常量。 var 定义变量
常量定义的格式:
const 常量名称 [类型] = 值

定于常量的方式:

  • 显示类型定义:const a string = "a"
  • 隐式类型定义:const b = "b"

多个相同类型的声明可以简写为:

const 常量1, 常量2 = 值1, 值2

package main

import "fmt"

func main() {
	const URL1 string = "www.baidu.com"
	const URL2 = "www.bilibili.com"
	fmt.Println(URL1, URL2)

	const URL3, URL4 = "www.baidu.com", "www.bilibili.com"
	fmt.Println(URL3, URL4)
}

注意:

  • 常量是一个特殊的变量,它的值无法改变。
  • 常量的值也并非无法改变,但是需要跳过常量名,直接找到内存地址,进行修改值

特殊常量 iota

iota是一个特殊的常量,可以认为是一个可以被编译器修改的常量

  • iota 在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为语句块中的行索引)
  • 第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1
package main

import "fmt"

func main() {
	const (
		a = iota // 0
		b = iota // 1
		c = 10   // 独立值 10,iota += 1
		d = iota // 3
		e = iota // 4
		f = 100  // 100,iota += 1
		g = iota // 6
		h = iota //7
	)
	fmt.Println(a, b, c, d, e, f, g, h) // 0 1 10 3 4 100 6 7
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值