go语言基本语法
一.变量声明与赋值
var name type 比如 var sum int
每行结束可以不用分号
二.数组
三.指针
指针声明方式 var ptr *int
ptr :指针名字
*int 表示指针的类型
空指针:nil 跟c语言中的NULL 是一样的
结构体指针 和结构体实例 访问结构体成的方式都是一样的
比如
type Person struct {
age int
name string
height int
}
var str Person;
var ptr *Person;
str.name = "tufei"
ptr = &str
访问名字的时候 可以使用 str.name 或者 ptr.name
- 1.通过 struct 变量.成员 变量来访问。
- 2.通过 struct 指针.成员 变量来访问。
四.interface接口
interface 声明的格式
type iname interface{
method1(string) string
}
声明结构体 需要实现interface里面的方法
type st struct{ name string}
func (s *st)method1(name string) string {
s.name = name
return s.name
}
主函数中
var i interface
i = new(st)
name :=i.method1("tufei")
Println(name)
五.协程处理
协程处理模式 GPM
G:协程 Gorutine
P:processer 处理器 :最新版本的go cpu核的数量就是p的数量
M:内核态线程
https://www.cnblogs.com/secondtonone1/p/11803961.html
六.channel 与select
通道 声明方式 var ch chan int = make(chan int) //其中chan是关键字
select 是go语言提供类似 swtich case的用法,但是它的case只能是IO操作
func channelTest (ch chan int,stopCh chan bool) {
for i:=0;i<10;i++{
ch <- i
time.Sleep(time.Second)
}
stopCh<-true
}
func selectTest(ch chan int,stopCh chan bool) {
for {
select {
case tmp1:=<-ch :
fmt.Println("recived from ch:",tmp1)
case tmp2:=<-stopCh :
fmt.Println("recived from stopCh:",tmp2)
goto END
}
}
END:
}
在main函数中调用者两个函数
ch := make(chan int)
stopCh:= make(chan bool)
go channelTest (ch, stopCh)
selectTest(ch,stopCh)
能看到 收到每隔一秒来自 ch通道的输入,10秒后收到停止信号,跳出循环
七.结构体转json字符串,json字符串转结构体数组
1.定义结构体
type Product struct {
Name string `json:"name"`
Price int 'json:"price"'
IsOnSale bool `json:"isonsale,string"` //bool值 以字符串的形式暂时
}
2.通过 json.Marshal 和 json.UnMarshal 实现相互转换
productArgs := []Product{
{"apple",30,ture},
{"orange",3,ture},
}
//结构体转换成json字符串
productJsonStr := json.Marshal(productArgs)
fmt.Printf("结构体转json字符串: %s \n", productJsonStr )
//json字符串转结构体数组
productList := []Proudct{}
json.UnMarshal(productJsonStr, productList)
fmt.Printf("json字符串转结构体: %s \n", productList)
go 编程规范:
https://colobu.com/2017/02/07/write-idiomatic-golang-codes/#%E6%B3%A8%E9%87%8A 【推荐*****】
https://draveness.me/golang-101/
新手推荐入门学习基础语法的网站:https://www.runoob.com/go/go-map.html
巩固学习文献
参考文档
- https://golang.org/doc/effective_go.html
- https://github.com/golang/go/wiki/CodeReviewComments
- https://dmitri.shuralyov.com/idiomatic-go
- https://talks.golang.org/2014/readability.slide#1
- https://github.com/dominikh/go-tools/tree/master/simple
- https://github.com/dominikh/go-tools/tree/master/cmd/structlayout-optimize
- https://go-zh.org
- https://docs.google.com/presentation/d/1OT-dMNbiwOPeaivQOldok2hUUNMTvSC0GJ67JohLt5U/pub?start=false&loop=false&delayms=3000&slide=id.g18b1f95882_1_135
- https://github.com/d-smith/go-training/blob/master/idiomatic-go.md
- https://github.com/opennota/check
- http://golang-sizeof.tips
- https://github.com/mibk/dupl

浙公网安备 33010602011771号