目录
写一个简单的hello world
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
fmt.Println("hello go") // 对间隔不敏感
}
GO的关键字
定义变量和常量
数据类型
bool类型:true和false
数字类型:包括整数类型和浮点值类型
字符串类型:string,声明后不可改变
派生类型:指针类型、数组类型、结构类型、联合类型和函数类型、切片类型、接口类型
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
var a int = 10
var b float32 = 1.1
var c byte = 10
var d rune = -10
var name string = "zeng"
fmt.Println(a, b, c, d, name)
}
引用类型
特质slice、map和channel(先简单了解一下)
package main
import "fmt"
func main() {
// slice
s := make([]int, 0, 10)
s = append(s, 10)
fmt.Println(s)
// map
m := make(map[string] int)
m["zeng"] = 99
fmt.Println(m, m["zeng"])
// 用函数new返回指针
p := new(map[string] int)
m1 := *p
m1["zeng"] = 21 // 会出现错误,但仅仅给map分配了空间,并没有为key和value分配
fmt.Println(m1, m1["zeng"])
}
变量
变量声明的四种形式
- 指定变量类型
- 根据值自定判定类型
- 使用:=
- 多变量声明
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
var a int = 10 // 指定变量类型
fmt.Println(a)
var b = 9.9 // 指定变量类型
fmt.Println(b)
c:="zeng" // 指定变量类型
fmt.Println(c)
var d,e,f=1, 2, 3 // 多变量赋值方法
fmt.Println(d, e, f)
var (
age int
name string
)
age = 10
name = "zeng"
fmt.Println(age, name)
_, x = 100, 200 // _代表站位,无法显示,读取和写入
fmt.Println(x)
}
常量
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
const name="zeng"
//name = "zeng2 // 提示错误
const (
index1=-1
index2=0
index3=1
)
const current_index = index1
fmt.Println(current_index)
}
值类型和引用类型
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
var name string
name = "zeng"
fmt.Println(name, &name)
}
iota
用来统计一行代码中被调用的次数
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
const (
a = iota // iota:特殊标量,可以认为是一个被编译器修改的常量
b = iota
c = iota
d = iota
)
fmt.Println(a, b)
fmt.Println(a, b, c, d)
fmt.Println(a, b, c, d)
}
一些其他的
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
import "unsafe"
func main() { // 大括号的位置是固定的
const name="zeng"
fmt.Println(len(name))
fmt.Println(unsafe.Sizeof(name))
var data uint32=10
fmt.Println(unsafe.Sizeof(data)) // 占内存字节数
}
运算符
算术运算符
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=10
b:=7
fmt.Println(a+b)
fmt.Println(a-b)
fmt.Println(a*b)
fmt.Println(a/b)
fmt.Println(a%b)
}
关系运算符
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=10
b:=7
fmt.Println(a>b)
fmt.Println(a<b)
fmt.Println(a==b)
fmt.Println(a!=b)
fmt.Println(a>=b)
fmt.Println(a<=b)
}
逻辑运算符
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=false
b:=true
fmt.Println(a && b)
fmt.Println(a || b)
fmt.Println(!(a || b))
}
位运算符
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=7
b:=5
// fmt的格式化输出请参考https://www.cnblogs.com/yinzhengjie/p/7680829.html
fmt.Printf("%b\r\n", a)//已经不是Println了
fmt.Printf("%b\r\n", a&b)
}
赋值运算符
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=7
a++
fmt.Println(a)
a--
fmt.Println(a)
a^=2
fmt.Println(a)
}
其他运算符
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=7
fmt.Println(&a) // 取地址运算符
var ptr *int
ptr = &a // 间接寻址运算符
fmt.Println(ptr," ",*ptr)
}
GO语言类型转换
package main // 固定
import "fmt" // 导入fmt模块实现输入输出
func main() { // 大括号的位置是固定的
a:=17
b:=5
fmt.Printf("%f\r\n", float32(a/b))
fmt.Printf("%f\r\n", float32(a)/float32(b))
}
标准库strconv可以在不同进制(字符串)间转换
package main
import (
"strconv"
"fmt"
)
func main() {
a,_ := strconv.ParseInt("0111", 2, 32)
b,_ := strconv.ParseInt("0144", 8, 32)
c,_ := strconv.ParseInt("64", 16, 32)
fmt.Println(a, b, c)
}