第二章程序结构
2.1名称
- 在Go中首字母大写表示导出,意味着对包外可见和可访问
- Go的命名风格是驼峰式
2.2声明
Go中主要有4个声明:
- 变量(var)
- 常量(const)
- 类型(type)
- 函数(func)
Go程序的组织是存储在一个以.go为后缀的文件里。每一个文件以package声明开头,表明文件属于哪个包。后面跟着import,
然后是包级别的类型、变量、常量、函数的声明
2.3变量
var声明方式
var name type = expression
var i , j , k int
var b ,f ,s = true , 2.3 , "four"
var f , err = os.Open(name)
要注意type和expression可以省略一个
Go中零值机制保证不存在未初始化变量
在局部函数中可以使用短变量声明
p := new(int) //返回一个指向int的指针
变量逃逸
var global *int func f(){ var x int x = 1 global = &x //x一定是分配堆区 变量逃逸 }
2.4 赋值
- 多重赋值
//计算两个整数的最大公约数
func gcd(x, y int) int{
for y != 0{
x , y = y , x % y
}
return x
}
2.5 类型声明
type Celsiud float64
2.6 包和文件
-
switch里面每一个cach都是一个作用域
-
开启gomudule后在任意一个目录下新建项目,导入该项目的其他包时都是以项目名开头
-
但是如果在gopath目录下则是src后面的目录开头
第三章基本数据
数据类型分为四大类:
- 基本类型 包括数字、string、bool
- 聚合类型 数组 、 struct
- 引用类型 指针 、 slice 、 map 、 函数 、 通道 channel
- 接口类型
3.1整数
-
Go语言中取模运算符%的取模余数的正负号总是与被除数一致,例如-5%3和-5%-3都得-2
-
&^是位清空运算符
-
表达式 z = x &^ y 中,若y的某位是1,则z的对应位等于0;否则,它就等于x的对应位
3.2浮点数
var z float64
fmt.Println(z , -a , 1/z , -1/z , z/z) // "0 -0 +Inf -Inf NaN"
nan := math.NaN()
3.3复数
var x complex128 = complex(1, 2) // 1+2i
var y complex128 = complex(3, 4) // 3+4i
fmt.Println(x * y) //(-5+10i)
fmt.Println(real(x * y)) //-5
fmt.Println(imag(x * y)) //10
3.4布尔值
布尔值可以由运算符&&(AND)以及||(OR) 组合运算,但是会有短路行为
布尔值无法隐式转换成数值0或1
3.5字符串
- 字符串不可改变,内部的数据不允许修改。s[0] = ‘a’ 这样的操作编译错误
func intsToString(values []int) string {
var buf bytes.Buffer
buf.WriteByte('[')
for i, v := range values {
if i > 0 {
buf.WriteString(", ")
}
fmt.Fprintf(&buf, "%d", v)
}
buf.WriteByte(']')
return buf.String()
}
func main() {
fmt.Println(intsToString([]int{1, 2, 3})) // "[1, 2, 3]"
}
字符串和数字的进制转化
strconv
fmt.Sprintf
3.6 常量
变量声明中,假如没有显式指定类型,无类型常量会隐式转换成该变量的默认类型