Golang 學(xué)習(xí)筆記

golang 簡(jiǎn)介

靜態(tài) 強(qiáng)類型 編譯型語言

GO語言適用場(chǎng)景及GO語言的優(yōu)勢(shì)
Go語言是谷歌推出的一種全新的編程語言覆积,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:
我們之所以開發(fā)Go莫鸭,是因?yàn)檫^去10多年間軟件開發(fā)的難度令人沮喪。

Go是谷歌2009發(fā)布的第二款編程語言脑沿。該獎(jiǎng)項(xiàng)授予在2009年市場(chǎng)份額增長(zhǎng)最多的編程語言悲靴。
谷歌資深軟件工程師羅布·派克(Rob Pike)表示,“Go讓我體驗(yàn)到了從未有過的開發(fā)效率护昧』昶”派克表示,和今天的C++或C一樣惋耙,Go是一種系統(tǒng)語言捣炬。他解釋道熊昌,“使用它可以進(jìn)行快速開發(fā),同時(shí)它還是一個(gè)真正的編譯語言湿酸,我們之所以現(xiàn)在將其開源婿屹,原因是我們認(rèn)為它已經(jīng)非常有用和強(qiáng)大。

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

公有變量/函數(shù) 私有變量/函數(shù)

大些字母開頭的變量或者函數(shù)等是public的推溃,可以被其他包訪問昂利;小些的則是private的,不能被其他包訪問到铁坎。這樣就省去了public和private聲明的煩惱蜂奸,使代碼變的更簡(jiǎn)潔。

map

map類型厢呵,Java里是Map接口窝撵,go里叫做字典

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

函數(shù)方法

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()
}

包名調(diào)用稱之為函數(shù)
創(chuàng)建對(duì)象實(shí)例調(diào)用稱之為方法

多返回值

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

結(jié)構(gòu)體

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
}

//值拷貝,不改變?cè)瓉淼腢ser對(duì)象值
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類型碌奉,不過它不需要強(qiáng)制實(shí)現(xiàn),在Go中寒砖,如果你這個(gè)類型(基本類型赐劣,結(jié)構(gòu)體等都可以)擁有了接口的所有方法,那么就默認(rèn)為這個(gè)類型實(shí)現(xiàn)了這個(gè)接口哩都,是隱式的魁兼,不需要和java一樣,強(qiáng)制使用implement強(qiáng)制實(shí)現(xiàn)漠嵌。

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)
}

并發(fā)

  • go run() go 關(guān)鍵字 開啟一個(gè)協(xié)程 (輕量級(jí)線程)
  • 協(xié)程通信(類似java selector channel 機(jī)制)
  • 同步(sync咐汞,sync.WaitGroup)
 package main

import "fmt"
//協(xié)程通信
exit := make(chan struct{})
    go func() {
        time.Sleep(time.Second * 3)
        println("chan1 chan goroutine end")
        defer close(exit) //關(guān)閉通道
    }()
    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
}

異常機(jī)制

go內(nèi)置的error類型非常簡(jiǎn)潔,只用實(shí)現(xiàn)Error方法即可儒鹿,可以打印一些詳細(xì)的錯(cuò)誤信息化撕,比如常見的函數(shù)多值返回,最后一個(gè)返回值經(jīng)常是error约炎,用于傳遞一些錯(cuò)誤問題植阴,這種方式要比java throw Exception的方法更優(yōu)雅。

Defer代替finally
go中沒有java的finally了圾浅,那么如果我們要關(guān)閉一些一些連接掠手,文件流等怎么辦呢,為此go為我們提供了defer關(guān)鍵字狸捕,這樣就可以保證永遠(yuǎn)被執(zhí)行到喷鸽,也就不怕關(guān)閉不了連接了。

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

golang 應(yīng)用

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

GoLang 相關(guān)

官網(wǎng)
學(xué)習(xí)書籍
Go Web 編程
how to write go
go example
golang mac 安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末府寒,一起剝皮案震驚了整個(gè)濱河市魁衙,隨后出現(xiàn)的幾起案子报腔,更是在濱河造成了極大的恐慌,老刑警劉巖剖淀,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纯蛾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡纵隔,警方通過查閱死者的電腦和手機(jī)翻诉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捌刮,“玉大人碰煌,你說我怎么就攤上這事∩鹱鳎” “怎么了芦圾?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)俄认。 經(jīng)常有香客問我个少,道長(zhǎng),這世上最難降的妖魔是什么眯杏? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任夜焦,我火速辦了婚禮,結(jié)果婚禮上岂贩,老公的妹妹穿的比我還像新娘茫经。我一直安慰自己,他們只是感情好萎津,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布卸伞。 她就那樣靜靜地躺著,像睡著了一般锉屈。 火紅的嫁衣襯著肌膚如雪瞪慧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天部念,我揣著相機(jī)與錄音,去河邊找鬼氨菇。 笑死儡炼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的查蓉。 我是一名探鬼主播乌询,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼豌研!你這毒婦竟也來了妹田?” 一聲冷哼從身側(cè)響起唬党,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鬼佣,沒想到半個(gè)月后驶拱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晶衷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年蓝纲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晌纫。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡税迷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锹漱,到底是詐尸還是另有隱情箭养,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布哥牍,位于F島的核電站毕泌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砂心。R本人自食惡果不足惜懈词,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辩诞。 院中可真熱鬧坎弯,春花似錦、人聲如沸译暂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外永。三九已至崎脉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伯顶,已是汗流浹背囚灼。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祭衩,地道東北人灶体。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掐暮,于是被迫代替她去往敵國(guó)和親蝎抽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容