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 

巩固学习文献

参考文档

  1. https://golang.org/doc/effective_go.html
  2. https://github.com/golang/go/wiki/CodeReviewComments
  3. https://dmitri.shuralyov.com/idiomatic-go
  4. https://talks.golang.org/2014/readability.slide#1
  5. https://github.com/dominikh/go-tools/tree/master/simple
  6. https://github.com/dominikh/go-tools/tree/master/cmd/structlayout-optimize
  7. https://go-zh.org
  8. https://docs.google.com/presentation/d/1OT-dMNbiwOPeaivQOldok2hUUNMTvSC0GJ67JohLt5U/pub?start=false&loop=false&delayms=3000&slide=id.g18b1f95882_1_135
  9. https://github.com/d-smith/go-training/blob/master/idiomatic-go.md
  10. https://github.com/opennota/check
  11. http://golang-sizeof.tips
  12. https://github.com/mibk/dupl

 

posted @ 2020-06-29 14:31  土匪哥哥  阅读(727)  评论(0)    收藏  举报