完善golang

pull/9/head
chlins 7 years ago
parent 6f87696238
commit b6a4071bca

@ -1,145 +1,230 @@
/** /*******************************************************************************
* Golang CHEATSHEET () - by chlins (created on 2018/02/14) * Golang CHEATSHEET () - by chlins (created on 2018/02/14)
* Version: 1, Last Modified: 2018/02/28 16:51 * Version: 3, Last Modified: 2018/03/07 19:51
* https://github.com/skywind3000/awesome-cheatsheets * https://github.com/skywind3000/awesome-cheatsheets
*/ ******************************************************************************/
/**
/******************************************************************************
* Go
*****************************************************************************/
go command [arguments] // go 命令 [参数]
go build // 编译包和依赖包
go clean // 移除对象和缓存文件
go doc // 显示包的文档
go env // 打印go的环境变量信息
go bug // 报告bug
go fix // 更新包使用新的api
go fmt // 格式规范化代码
go generate // 通过处理资源生成go文件
go get // 下载并安装包及其依赖
go install // 编译和安装包及其依赖
go list // 列出所有包
go run // 编译和运行go程序
go test // 测试
go tool // 运行给定的go工具
go version // 显示go当前版本
go vet // 发现代码中可能的错误
/*******************************************************************************
* Hello World * Hello World
*/ ******************************************************************************/
package main // main.go
package main // 包名
import "fmt" import "fmt" // 导入fmt包
func main() { func main() { // 主函数
fmt.Println("Hello World") fmt.Println("Hello World") // 打印输出
} }
// go run main.go // go run main.go // 直接运行
// go build && ./main // 先编译成二进制文件再运行
/**
*
*/ /*******************************************************************************
// 直接使用 := 来给一个未声明的变量赋值 *
a := 1 ******************************************************************************/
// 通过 var 变量名 数据类型 来声明 // 算数操作符
var a int + - * / % // 加 减 乘 除 取余
a = 1 & | ^ &^ // 位与 位或 位异或 位与非
<< >> // 左移 右移
// 比较操作
== != // 等于 不等于
< <= // 小于 小于等于
> >= // 大于 大于等于
// 逻辑操作
&& || ! // 逻辑与 逻辑或 逻辑非
// 其他
& * <- // 地址 指针引用 通道操作
/*******************************************************************************
*
******************************************************************************/
a := 1 // 直接给一个未声明的变量赋值
var b int // var 变量名 数据类型 来声明
var c float64
// 注意使用var声明过的变量不可再使用 := 赋值 // 注意使用var声明过的变量不可再使用 := 赋值
a = 2
const d = 1 // 常量
/**
*
*/
// 常量直接使用 const 声明
const a = 1 // golang 会自动推倒类型
/** /*******************************************************************************
* *
*/ ******************************************************************************/
// 字符 s := "hello" // 字符
s := "hello" a := 1 // int
// 数值 b := 1.2 // float64
a := 1 // int c := 1 + 5i // complex128
b := 1.2 // float64
c := 1 + 5i // complex128
// 数组 // 数组
arr1 := [3]int{4, 5, 6} // 手动指定长度 arr1 := [3]int{4, 5, 6} // 手动指定长度
arr2 := [...]int{1, 2, 3} // 由golang自动计算长度 arr2 := [...]int{1, 2, 3} // 由golang自动计算长度
// 切片 // 切片
sliceInt := []int{1, 2} // 不指定长度 sliceInt := []int{1, 2} // 不指定长度
sliceByte := []byte("hello") sliceByte := []byte("hello")
// 指针 // 指针
a := 1 a := 1
point := &a // 将a的地址赋给point point := &a // 将a的地址赋给point
/** /*******************************************************************************
* *
*/ ******************************************************************************/
// for // for
i := 10 i := 10
for i > 0 { for i > 0 {
println(i--) println(i--)
} }
// if else // if else
if i == 10 { if i == 10 {
println("i == 10") println("i == 10")
} else { } else {
println("i != 10") println("i != 10")
} }
// switch // switch
switch i { switch i {
case 10: case 10:
println("i == 10") println("i == 10")
default: default:
println("i != 10") println("i != 10")
} }
/** /*******************************************************************************
* *
*/ ******************************************************************************/
// 以func关键字声明 // 以func关键字声明
func test() {} func test() {}
// 匿名函数
f := func() {println("Lambdas function")} f := func() {println("Lambdas function")} // 匿名函数
f() f()
// 函数多返回值
func get() (a,b string) { func get() (a,b string) { // 函数多返回值
return "a", "b" return "a", "b"
} }
a, b := get() a, b := get()
/**
/*******************************************************************************
* *
*/ ******************************************************************************/
// golang中没有class只有struct // golang中没有class只有struct
type People struct { type People struct {
Age int // 大写开头的变量在包外可以访问 Age int // 大写开头的变量在包外可以访问
name string // 小写开头的变量仅可在本包内访问 name string // 小写开头的变量仅可在本包内访问
} }
p1 := People{25, "Kaven"} // 必须按照结构体内部定义的顺序 p1 := People{25, "Kaven"} // 必须按照结构体内部定义的顺序
p2 := People{name: "Kaven", age: 25} // 若不按顺序则需要指定字段 p2 := People{name: "Kaven", age: 25} // 若不按顺序则需要指定字段
// 也可以先不赋值 // 也可以先不赋值
p3 := new(People) p3 := new(People)
p3.Age = 25 p3.Age = 25
p3.name = "Kaven" p3.name = "Kaven"
/** /*******************************************************************************
* *
*/ ******************************************************************************/
// 方法通常是针对一个结构体来说的 // 方法通常是针对一个结构体来说的
type Foo struct { type Foo struct {
a int a int
} }
// 值接收者 // 值接收者
func (f Foo) test() { func (f Foo) test() {
f.a = 1 // 不会改变原来的值 f.a = 1 // 不会改变原来的值
} }
// 指针接收者 // 指针接收者
func (f *Foo) test() { func (f *Foo) test() {
f.a = 1 // 会改变原值 f.a = 1 // 会改变原值
} }
/**
* golang /*******************************************************************************
*/ * go
// go 协程 ******************************************************************************/
go func() { go func() {
time.Sleep(10 * time.Second) time.Sleep(10 * time.Second)
println("hello") println("hello")
}() // 不会阻塞代码的运行 代码会直接向下运行 }() // 不会阻塞代码的运行 代码会直接向下运行
// channel 通道 // channel 通道
c := make(chan int) c := make(chan int)
// 两个协程间可以通过chan通信 // 两个协程间可以通过chan通信
go func() {c <- 1}() // 此时c会被阻塞 直到值被取走前都不可在塞入新值 go func() {c <- 1}() // 此时c会被阻塞 直到值被取走前都不可在塞入新值
go func() {println(<-c)}() go func() {println(<-c)}()
// 带缓存的channel // 带缓存的channel
bc := make(chan int, 2) bc := make(chan int, 2)
go func() {c <- 1; c <-2}() // c中可以存储声明时所定义的缓存大小的数据这里是2个 go func() {c <- 1; c <-2}() // c中可以存储声明时所定义的缓存大小的数据这里是2个
go func() {println(<-c)}() go func() {println(<-c)}()
/*******************************************************************************
*
******************************************************************************/
// go的接口为鸭子类型即只要你实现了接口中的方法就实现了该接口
type Reader interface {
Reading() // 仅需实现Reading方法就实现了该接口
}
type As struct {}
func (a As) Reading() {} // 实现了Reader接口
type Bs struct {}
func (b Bs) Reading() {} // 也实现了Reader接口
func (b Bs) Closing() {}
/*******************************************************************************
*
******************************************************************************/
// 入门书籍
Go // 雨痕的
Go // 强烈推荐
// 网上资料
https://github.com/astaxie/build-web-application-with-golang // 谢大的
https://github.com/Unknwon/the-way-to-go_ZH_CN // 无闻
https://github.com/Unknwon/go-fundamental-programming // 无闻教学视频
// 第三方类库
https://golanglibs.com/
// 大杂烩
https://github.com/avelino/awesome-go
/*******************************************************************************
* References
******************************************************************************/
https://github.com/a8m/go-lang-cheat-sheet
https://github.com/LeCoupa/awesome-cheatsheets

Loading…
Cancel
Save