Go学习笔记之基础与变量

发布于:2024-11-29 ⋅ 阅读:(8) ⋅ 点赞:(0)

Go学习笔记

向世界问好

package main // 包名,main包是程序的入口,每个可执行程序都必须包含一个main包

import "fmt" // 导入包,fmt包是标准库中的包,用于格式化输入输出

func main() { // 程序入口,main函数是程序的入口,每个可执行程序都必须包含一个main函数
	fmt.Println("Hello World") // 打印字符串,换行,不格式化输出
	fmt.Print("Hello World")   // 打印字符串,不换行,不格式化输出
	fmt.Printf("Hello World")  // 打印字符串,不换行,格式化输出
} // main函数结束

世界正常运转的模样

  1. 代码每一行结束后不用写分号
  2. 运算符左右建议各加一个空格
  3. 强制的代码风格:左括号必须紧接着语句不换行,这个特性刚开始会使开发者不习惯,但随着对Go语言的不断熟悉,会发现风格统一让大家在阅读代码时把注意力集中到了解决问题上,而不是代码风格上
  4. go fmt主要用于格式化文档,让所有人的代码风格保持一致
go fmt main.go

go run main.go

世界礼物的接受规则

  1. 变量名称必须由数字、字母、下划线组成;
  2. 变量名称开头不能是数字
  3. 变量名称不能是保留字和关键字
  4. 变量名称是区分大小写的。在实际运用中,也建议不要用一个单词大小写区分两个变量。
  5. 变量名称一定要见名知意:变量名称建议用名词、方法名称建议用动词
  6. 变量命名一般采用驼峰式命名法,小驼峰命名法(``var maxAge);大驼峰命名法(var MaxAge`),如果封装成方法,小驼峰命名法表示私有,大驼峰命名法表示共有。当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有全部大写或全部小写。

接收世界的馈赠

//定义变量后必须使用,否则编译错误
var a int = 1           // 变量声明,初始化,赋值,类型推断,变量名不能以数字开头
	var b = 2               // 变量声明,初始化,赋值
	var c int               // 变量声明,不初始化,赋值
	c = 3                   // 变量赋值
	d := 3                  // 短变量声明,初始化,赋值,只能在函数内部使用

	var ( // 多变量声明,可以同时声明多个变量,也可以同时声明多个变量并赋值
		j int     // int类型,默认值为0
		k string  // string类型,默认值为空字符串
		l float64 // float64类型,默认值为0
	)
	j = 10
	k = "hello"
	l = 3.14

	fmt.Println(j, k, l) // 10 hello 3.14
	fmt.Println(a, b, c, d) // 打印变量值

褪去礼物的外衣

	// 常量
	const pi = 3.1415926 // 常量定义后不能修改,否则编译错误
	// pi = 3.14 // 常量定义后不能修改,否则编译错误
	fmt.Println(pi) // 输出常量,常量在程序运行期间不会改变
	// const e // 常量定义后必须赋值,否则编译错误

	const ( // const声明多个变量时,如果省略了值,则表示和上一行常量的值相同,如果省略了类型,则表示和上一行变量的类型相同
		q = 1 //赋值
		e
		p
	)
	fmt.Println(q, e, p) // 打印常量值,1 1 1

回赠世界的礼物

	fmt.Printf("a = %d\n", a) // %d表示十进制整数
	fmt.Printf("a = %T\n", a) // %T表示变量类型
	fmt.Printf("a = %b\n", a) // %b表示二进制整数
	fmt.Printf("a = %o\n", a) // %o表示八进制整数
	fmt.Printf("a = %x\n", a) // %x表示十六进制整数
	fmt.Printf("a = %#x\n", a) // %#x表示十六进制整数,带0x前缀
	fmt.Printf("a = %f\n", a) // %f表示浮点数
	fmt.Printf("a = %e\n", a) // %e表示科学计数法
	fmt.Printf("a = %E\n", a) // %E表示科学计数法,大写E
	fmt.Printf("a = %g\n", a) // %g表示根据实际情况选择%f或%e
	fmt.Printf("a = %G\n", a) // %G表示根据实际情况选择%f或%E
    fmt.Printf("a = %s\n", a) // %s表示字符串
    fmt.Printf("a = %q\n", a) // %q表示带双引号的字符串
    fmt.Printf("a = %v\n", a) // %v表示变量的值
    fmt.Printf("a = %+v\n", a) // %+v表示变量的值,带字段名
    fmt.Printf("a = %#v\n", a) // %#v表示变量的值,带类型和字段名
    fmt.Printf("a = %T\n", a) // %T表示变量的类型
    fmt.Printf("a = %p\n", &a) // %p表示变量的地址
    fmt.Printf("a = %t\n", true) // %t表示布尔值
    fmt.Printf("a = %c\n", 'a') // %c表示字符

将礼物深埋于心

func userinfo() (string, int) { // 函数返回值,返回多个值,返回值类型前加括号,返回值名前加括号
	return "张三", 18 // 返回值,返回多个值,返回值类型前加括号,返回值名前加括号
}

	// 匿名变量
	var username, _ = userinfo() // _ 表示匿名变量,用于接收不需要使用的返回值,匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
	fmt.Println(username)        // 张三

将美好全部记住

	// 每次const出现时,都会让iota初始化为0[自增长]
	const m = iota // m=0
	const (
		n = iota // n=0
		u        // u=1
	)
	fmt.Println(m, n, u) // 打印常量值,0 0 1

遗憾也在所难免

	const (
		n1 = iota // n1=0
		n2        // n2=1
		_         // 忽略
		n3        // n3=3
	)
	fmt.Println(n1, n2, n3) // 打印常量值,0 1 3

让美好更早到来

	const (
		n1 = iota // n1=0
		n2 = 100  // n2=100,常量赋值
		n3 = iota // n3=2,自增长
		n4        // n4=3,自增长,和n3类型相同
	)
	fmt.Println(n1, n2, n3, n4) // 打印常量值,0 100 2 3

接踵而至的美好

	const (
		n1, n2 = iota + 1, iota + 2 // n1=1,n2=2,iota写在一行,自增长相同
		n3, n4                      // n3=2,n4=3
		n5, n6                      // n5=3,n6=4
	)
	fmt.Println(n1, n2, n3, n4, n5, n6) // 打印常量值,1 2 2 3 3 4
	//定义变量
	n1, n2 := 10, 20    // 定义变量,多个变量写在一行,类型相同,可以省略类型
	fmt.Println(n1, n2) // 打印变量值,10 20,顺序打印