2020-12-28 Go初學筆記

Hello world程序

package main

import "fmt"

func main() {
    var a string = "abc"
    const WIDTH int = 5 
    fmt.Println("Hello, World!")
}

運行g(shù)o程序

go run hello.go 
go build hello.go 
./hello

Go 語言最主要的特性:

自動垃圾回收
更豐富的內(nèi)置類型
函數(shù)多返回值
錯誤處理
匿名函數(shù)和閉包
類型和接口
并發(fā)編程
反射
語言交互性

條件語句

if 布爾表達式 {
   /* 在布爾表達式為 true 時執(zhí)行 */
} else if {
  /* 在布爾表達式為 false 時執(zhí)行 */
} else {
  /* 在布爾表達式為 false 時執(zhí)行 */
}

條件選擇

switch {
case false:
        fmt.Println("1如贷、case 條件語句為 false")
        fallthrough
case true:
        fmt.Println("2、case 條件語句為 true")
        fallthrough
case false:
        fmt.Println("3、case 條件語句為 false")
        fallthrough
case true:
        fmt.Println("4篮洁、case 條件語句為 true")
case false:
        fmt.Println("5、case 條件語句為 false")
        fallthrough
default:
        fmt.Println("6眠寿、默認 case")
}

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s);
    /* 你可以定義任意數(shù)量的 case */
    default : /* 可選 */
       statement(s);
}

循環(huán)語句

for init; condition; post { }
for condition { }
for { }
for key, value := range oldMap {
newMap[key] = value
}
例如:

numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}

函數(shù)(帶錯誤處理)

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 實現(xiàn)
}

數(shù)組

var variable_name [SIZE] variable_type

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

切片(動態(tài)數(shù)組)

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

func main() {
   var numbers = make([]int,3,5)
   /* 允許追加空切片 */
   numbers = append(numbers, 0)
   printSlice(numbers)

   /* 向切片添加一個元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同時添加多個元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 創(chuàng)建切片 numbers1 是之前切片的兩倍容量*/
   numbers1 := make([]int, len(numbers), (cap(numbers))*2)

   /* 拷貝 numbers 的內(nèi)容到 numbers1 */
   copy(numbers1,numbers)
}

range 關鍵字用于 for 循環(huán)中迭代數(shù)組(array)佛舱、切片(slice)、通道(channel)或集合(map)的元素乌昔。
在數(shù)組和切片中它返回元素的索引和索引對應的值,在集合中返回 key-value 對壤追。

//這是我們使用range去求一個slice的和磕道。使用數(shù)組跟這個很類似
nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
    sum += num
}
fmt.Println("sum:", sum)
//在數(shù)組上使用range將傳入index和值兩個變量。上面那個例子我們不需要使用該元素的序號行冰,所以我們使用空白符"_"省略了溺蕉。有時侯我們確實需要知道它的索引伶丐。
for i, num := range nums {
    if num == 3 {
        fmt.Println("index:", i)
    }
}
//range也可以用在map的鍵值對上。
kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
    fmt.Printf("%s -> %s\n", k, v)
}
//range也可以用來枚舉Unicode字符串疯特。第一個參數(shù)是字符的索引哗魂,第二個是字符(Unicode的值)本身。
for i, c := range "go" {
    fmt.Println(i, c)
}

Map

一種無序的鍵值對的集合漓雅,是使用 hash 表來實現(xiàn)录别。
map_variable := make(map[key_data_type]value_data_type)

package main

import "fmt"

func main() {
        /* 創(chuàng)建map */
        countryCapitalMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}

        fmt.Println("原始地圖")

        /* 打印地圖 */
        for country := range countryCapitalMap {
                fmt.Println(country, "首都是", countryCapitalMap [ country ])
        }

        /*刪除元素*/ delete(countryCapitalMap, "France")
        fmt.Println("法國條目被刪除")

        fmt.Println("刪除元素后地圖")

        /*打印地圖*/
        for country := range countryCapitalMap {
                fmt.Println(country, "首都是", countryCapitalMap [ country ])
        }
}

類型轉(zhuǎn)換

type_name(expression)

go開啟新線程

package main

import (
        "fmt"
        "time"
)

func say(s string) {
        for i := 0; i < 5; i++ {
                time.Sleep(100 * time.Millisecond)
                fmt.Println(s)
        }
}

func main() {
        go say("world")
        say("hello")
}

通道

ch := make(chan int)
ch <- v    // 把 v 發(fā)送到通道 ch
v := <-ch  // 從 ch 接收數(shù)據(jù)
           // 并把值賦給 v
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邻吞,隨后出現(xiàn)的幾起案子组题,更是在濱河造成了極大的恐慌,老刑警劉巖抱冷,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔列,死亡現(xiàn)場離奇詭異,居然都是意外死亡旺遮,警方通過查閱死者的電腦和手機赵讯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耿眉,“玉大人边翼,你說我怎么就攤上這事∶簦” “怎么了讯私?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長西傀。 經(jīng)常有香客問我斤寇,道長,這世上最難降的妖魔是什么拥褂? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任娘锁,我火速辦了婚禮,結(jié)果婚禮上饺鹃,老公的妹妹穿的比我還像新娘莫秆。我一直安慰自己,他們只是感情好悔详,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布镊屎。 她就那樣靜靜地躺著,像睡著了一般茄螃。 火紅的嫁衣襯著肌膚如雪缝驳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音用狱,去河邊找鬼运怖。 笑死,一個胖子當著我的面吹牛夏伊,可吹牛的內(nèi)容都是我干的摇展。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼溺忧,長吁一口氣:“原來是場噩夢啊……” “哼咏连!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鲁森,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捻勉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刀森,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡报账,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年研底,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透罢。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡榜晦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羽圃,到底是詐尸還是另有隱情乾胶,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布朽寞,位于F島的核電站识窿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脑融。R本人自食惡果不足惜喻频,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肘迎。 院中可真熱鬧甥温,春花似錦、人聲如沸妓布。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匣沼。三九已至狰挡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背圆兵。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工跺讯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人殉农。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓刀脏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親超凳。 傳聞我的和親對象是個殘疾皇子愈污,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • 將兩個(或更多)語句放在一行書寫,它們 必須用分號 (’;’) 分隔轮傍。一般情況下暂雹,你不需要分號。 init函數(shù)和m...
    涵仔睡覺閱讀 3,796評論 0 8
  • 寫在前面 本文是Go語言的快速入門教程创夜,適合于具有一定C語言或者Java語言基礎的開發(fā)人員杭跪,如果您是一位Go...
    foundwei閱讀 1,858評論 5 17
  • Go 語言的基礎組成有以下幾個部分:包聲明 引入包 函數(shù) 變量 語句 & 表達式 注釋 當標識符(包括常量、變量驰吓、...
    安然在路上閱讀 250評論 0 0
  • 這篇文章就總結(jié)一下go 的細節(jié)具體參考:http://c.biancheng.net/golang/[http:/...
    天空藍雨閱讀 586評論 0 0
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了翁涤? 不是不允許自己墜落桥言, 我沒有滴水不進的保護膜。 就是害怕變得面...
    悶熱當乘涼閱讀 4,249評論 0 13