main
package main
import "fmt"
func test() (int, error) {
return 0, nil
}
func main() {
//变量的定义
//静态语言的变量和动态语言的变量差异很大
//1. 变量的声明和定义
//var a = 20
//var b = 20
//c := 100
//fmt.Println(a, b, c)
//
//d, e := 1, 2
//fmt.Println(d, e)
//
//var f, g, h int
//f, g, h = 1, 2, 3
//fmt.Println(f, g, h)
////集合类型
//var (
// a int
// name string
//)
var i = 10
i = 20
fmt.Println(i)
//匿名变量 变量一旦被定义 不使用会报错
//常量的定义
//const PI = 3.14159265
//r := 2.0
//c := 2. * PI * r
//fmt.Println(c)
//枚举
//const (
// Unknown = 0
// Female = 1
// Male = 2
//)
//常量组如不指定类型和初始化值,该类型和值和上一行的一致
//const (
// x int = 16
// y
// s = "abc"
// z
//)
//fmt.Println(x, y, s, z)
//Output:16 16 abc abc
//1. 常量的数据类型值可以是布尔、数字、字符串
//2. 不曾使用的常量,在编译的时候不会报错
//const常量的iota, 常量计数器
const (
Unknown = iota //计数器 从0开始 第一行不能省略
Female
Male
//Book = 0
//Cloth = 1
//Phone = 2
//DestTop = 3
)
//0,1,2 本身不重要,重点在于这三个值不一样
fmt.Println(Unknown, Female, Male)
//iota你真的懂了吗?
// 1. iota只能在常量组中使用
// 2. 各个常量组之间,const定义块互不干扰
// 3. 没有表达式的常量定义复用上一行的表达式
// 4. 从第一行开始,iota从0 "逐行" 加一
const (
a = iota //iota = 0
b = 10 //iota = 1 每一行iota加一
c // c = 10, iota = 2
//d = iota
d, e = iota, iota
f = iota
//iota代表的是这里的行数
)
//fmt.Println(a, b, c, d)
//Output: 0 10 10 3
fmt.Println(a, b, c, d, e, f)
//Output: 0 10 10 3 3 4
}
scope
package main
import "fmt"
var c = 20
func main() {
//变量的作用域
//局部变量
//缩进的习惯
//静态语言写起来代码多,但是严谨性很好
//c := 10 //全局变量定义时无法使用短变量声明
//fmt.Println(c)
////Output: 10
//sex := "Female"
//if sex == "Female" {
// outStr := "女"
//}
//fmt.Println(outStr)
//程序无法运行
fmt.Printf("%c\n", 97)
//在go中字符和字符串不是一种类型 字符类型是单引号 字符串是双引号
fmt.Printf("%d", '慕') //int32 Unicode编码
}