美文网首页
Golang 学习笔记

Golang 学习笔记

作者: weiminsir | 来源:发表于2019-01-18 13:28 被阅读0次

    golang 简介

    静态 强类型 编译型语言

    GO语言适用场景及GO语言的优势
    Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:
    我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。

    Go是谷歌2009发布的第二款编程语言。该奖项授予在2009年市场份额增长最多的编程语言。
    谷歌资深软件工程师罗布·派克(Rob Pike)表示,“Go让我体验到了从未有过的开发效率。”派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,“使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。

    HelloWorld

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, 世界")
    }
    

    变量 常量

    var age int =10
    var age  =10
    age := 2018
    const age int = 10
    const age= 10
    

    公有变量/函数 私有变量/函数

    大些字母开头的变量或者函数等是public的,可以被其他包访问;小些的则是private的,不能被其他包访问到。这样就省去了public和private声明的烦恼,使代码变的更简洁。

    map

    map类型,Java里是Map接口,go里叫做字典

    ages := make(map[string]int)
        ages["weimin"] = 20
        ages["brother"] = 30
        fmt.Print(ages["michael"])
    //删除
    delete(ages,"michael")
    

    函数方法

    package main
    
    import "time"
    
    type Person struct {
        age  int
        name string
    }
    
    func (p Person) GetName() string {
        return p.name
    }
    
    func GetTime() time.Time{
        return time.Now()
    }
    

    包名调用称之为函数
    创建对象实例调用称之为方法

    多返回值

    func backValue() (string, int, error) {
        return "helloWorld", 100, nil
    }
    str,value:=backValue()
    str,_:=backValue()
    

    指针

    Go的指针和C中的声明定义是一样的,其作用类似于Java引用变量效果。
        var age int = 10
        var p *int = &age
        *p = 11
        fmt.Println(age) //  age=11
    

    结构体

    package main
    
    import (
        "fmt"
    )
    
    type Person struct {
        age  int
        name string
        Address // 组合
    }
    
    type Address struct {
        city string
    }
    
    func (p Person) GetName() string {
        return p.name
    }
    
    func (p Person) GetAge() int {
        return p.age
    }
    
    //值拷贝,不改变原来的User对象值
    func valueDeliver(person Person) {
        person.name = "值拷贝"
        person.age = 12
        fmt.Println("person :", person)
    }
    func pointerDeliver(person *Person) {
        person.name = "指针"
        person.age = 12
        fmt.Println("person :", person)
    }
    
    func main() {
        person := Person{}
        valueDeliver(person)
        pointerDeliver(&person)
        //person : {12 值拷贝 {}}
        //person : &{12 指针 {}}
    }
    
    

    接口

    Go的接口和Java类型,不过它不需要强制实现,在Go中,如果你这个类型(基本类型,结构体等都可以)拥有了接口的所有方法,那么就默认为这个类型实现了这个接口,是隐式的,不需要和java一样,强制使用implement强制实现。

    package main
    import (
        "fmt"
        "strconv"
    )
    type Stringer interface {
        String() string
    }
    type User struct {
        age  int
        name string
    }
    func (p User) String() string {
        return "name is " + p.name + ",age is " + strconv.Itoa(p.age)
    }
    func main() {
        var str Stringer
        user := &User{}
        user.age = 10
        user.name = "hello"
            str = user
        fmt.Println(str)
    }
    

    并发

    • go run() go 关键字 开启一个协程 (轻量级线程)
    • 协程通信(类似java selector channel 机制)
    • 同步(sync,sync.WaitGroup)
     package main
    
    import "fmt"
    //协程通信
    exit := make(chan struct{})
        go func() {
            time.Sleep(time.Second * 3)
            println("chan1 chan goroutine end")
            defer close(exit) //关闭通道
        }()
        println("main start...")
        <-exit
    //main start...
    //chan1 chan goroutine end
    //main end...
    
    //同步
    var rw sync.RWMutex
    func (p *Person) updateToken(name string) {
        rw.Lock()
        defer rw.Unlock()
    
        // updateToken
    }
    

    异常机制

    go内置的error类型非常简洁,只用实现Error方法即可,可以打印一些详细的错误信息,比如常见的函数多值返回,最后一个返回值经常是error,用于传递一些错误问题,这种方式要比java throw Exception的方法更优雅。

    Defer代替finally
    go中没有java的finally了,那么如果我们要关闭一些一些连接,文件流等怎么办呢,为此go为我们提供了defer关键字,这样就可以保证永远被执行到,也就不怕关闭不了连接了。

    f,err:=os.Open(filename)
    defer f.Close()
    

    golang 应用

    • 七牛云
    • docker
    • 抖音
    • 比特币

    GoLang 相关

    官网
    学习书籍
    Go Web 编程
    how to write go
    go example
    golang mac 安装

    相关文章

      网友评论

          本文标题:Golang 学习笔记

          本文链接:https://www.haomeiwen.com/subject/bvokdqtx.html