Golang 学习笔记

栏目: Go · 发布时间: 5年前

内容简介:静态 强类型 编译型语言GO语言适用场景及GO语言的优势Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:

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
  • 抖音
  • 比特币

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

村落效应

村落效应

[加] 苏珊·平克(Susan Pinker) / 青涂 / 浙江人民出版社 / 2017-3-1 / CNY 69.90

 面对面的接触是作为社会性动物的人类最古老、深刻的需求。在互联网时代,社交媒体已经成为人际沟通的主体,人际关系的维系越来越被社交媒体上的点赞、转发、评论代替,在冰冷的互动中,我们失去了真实与温度。面对面的人际关系与接触能让人感受到如村落生活般的归属感,它是一个人免疫力、复原力和影响力的真正来源。虽然互联网拥有毋庸置疑的优势,但是如果我们渴望快乐、健康、长寿……没错,还有智慧,我们就需要想方设法腾......一起来看看 《村落效应》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具