[Go] GO學習文檔-白貓版

?? 簡介

Go 是一個開源的編程語言,它能讓構(gòu)造簡單甲雅、可靠且高效的軟件變得容易。

Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人钞钙,并最終于2009年11月開源坦辟,在2012年早些時候發(fā)布了Go 1穩(wěn)定版本】睿現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個活躍的社區(qū)锉走。

?? 環(huán)境搭建

官方網(wǎng)站
https://studygolang.com/

IDE下載
https://download.jetbrains.com.cn/go/goland-2021.1.exe

?? Hello World

package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

?? 變量

// 整型
var a int = 100
a := 100
// 浮點型
b := 1000.0
// 字符串
c := "Objcat"
// 數(shù)組
d := []int{1, 2, 3}
// 字典
e := map[string]string{"name": "objcat", "age": "18"}

?? 函數(shù)

1.無參數(shù)無返回值

func hello() {
    fmt.Println("hello world!")
}

func main() {
    hello()
}

2.有參數(shù)無返回值

func hello(text string) {
    fmt.Println(text)
}

func main() {
    hello("hello world!")
}

3.有參數(shù)有返回值

func hello(text string) string {
    return text
}

func main() {
    result := hello("hello world!")
    fmt.Println(result)
}

?? 字符串

1. 定義字符串

var myStr string = "123"
// 或 推導
myStr := "123"

2. 獲取字符串

// 字符串可以通過下標來獲取字字符串
fmt.Printf("%c", myStr[0]) // 1 
fmt.Printf("%c", myStr[1]) // 2 

3.拼接字符串

// 加號拼接
myStr2 := myStr + "456" // 123456
// 數(shù)組拼接
StrArr := []string{"123", "456"}
myStr2 := strings.Join(StrArr, "") // 123456
// format
myStr2 := fmt.Sprintf("%s%s", myStr, "456") // 123465
// Buffer
var sbuffer bytes.Buffer
sbuffer.WriteString("123")
sbuffer.WriteString("456")
myStr2 := sbuffer.String() // 123456
// builder
var sbuilder strings.Builder
sbuilder.WriteString("123")
sbuilder.WriteString("456")
myStr2 := sbuilder.String()

4.替換字符串

myStr2 := strings.ReplaceAll(myStr, "1", "12") // 1223

5.查找字符串位置

index := strings.Index(myStr, "2") // 1

6.遍歷字符串

for index, value := range myStr {
    fmt.Println("索引", index)
    fmt.Println(fmt.Sprintf("值 %c 類型 %T", value, value))
}

?? 數(shù)組

1.定義數(shù)組

// 定長數(shù)組
var myArr [10]string
myArr := [10]int{1, 2, 3}

// 動態(tài)數(shù)組
var myArr = make([]int, 0)
myArr := []int{}

2.獲取元素

// 通過下標獲取 下標從0開始
print(myArr[0])

3.添加元素

my_arr = append(myArr, 1)
print(myArr) // [1]

4.刪除元素

// Go沒有提供刪除數(shù)組中元素的方法 但是可以使用append來達到效果

// 1.刪除i位置的元素 - 原理就是把第i個位置空下去了
append(myArr[:i], myArr[i+1:]...)

// 2.直接刪除元素
for i, _ := range myArr {
    if myArr[i] == obj {
        myArr = append(array[:i], array[i+1:]...)
        break
    }
}

// 3.封裝方法
func remove(arrayInterface interface{}, obj interface{}) interface{} {

    switch arrayInterface.(type) {

    case []int:
        array := arrayInterface.([]int)
        for i, _ := range array {
            if array[i] == obj {
                arrayInterface = append(array[:i], array[i+1:]...)
                return arrayInterface
            }
        }
        break

    case []string:
        array := arrayInterface.([]string)
        for i, _ := range array {
            if array[i] == obj {
                arrayInterface = append(array[:i], array[i+1:]...)
                return arrayInterface
            }
        }
        break
    }

    return arrayInterface

}

// 使用
myArr2 := []string{"1", "2", "3"}
fmt.Println(myArr2)
myArr2 = remove(myArr2, "2").([]string)
fmt.Println(myArr2)

5.截取元素

myArr2 = myArr[0:2] // [1, 2]
myArr2 = myArr[:2]  // [1, 2]
myArr2 = myArr[1:2] // [2]
myArr2 = myArr[1:]  // [2, 3]

6.拼接數(shù)組

myArr = append(myArr, []int{6, 7, 8}...)
fmt.Println(myArr)

?? 字典

1.定義字典

var myDic = make(map[string]string)
myDic["name"] = "張三"
myDic["age"] = "18"
// 或者
myDic := map[string]string{
    "name": "張三",
    "age": "18",
}

2.獲取元素

str := myDic["name"]
fmt.Println(str) // 張三

3.添加元素

myDic["gender"] = "男"
fmt.Println(myDic) // map[age:18 gender:男 name:張三]

4.刪除元素

delete(myDic, "name")
fmt.Println(myDic) // map[age:18]

5.拼接字典

// 官方?jīng)]有提供 但是可以自己寫 當然這是不健全的
func Append(dictInterface1 interface{}, dictInterface2 interface{}) interface{}  {
    switch dictInterface1.(type) {
    case map[string]string:
        dict1, _ := dictInterface1.(map[string]string)
        dict2, _ := dictInterface2.(map[string]string)
        for k, v := range dict2 {
            dict1[k] = v
        }
        return dict1
    }
    return dictInterface1
}
// 用法
myDic = Append(myDic, map[string]string{"gender": "男", "cat": "objcat"}).(map[string]string)
fmt.Println(myDic)

?? 集合

go 沒有集合的概念 但是可以用數(shù)組代替

1.創(chuàng)建集合

// 定長數(shù)組
var myArr [10]string
myArr := [10]int{1, 2, 3}

// 動態(tài)數(shù)組
var myArr = make([]int, 0)
myArr := []int{}

1.并集

func union(slice1, slice2 []string) []string {
    m := make(map[string]int)
    for _, v := range slice1 {
        m[v]++
    }

    for _, v := range slice2 {
        times, _ := m[v]
        if times == 0 {
            slice1 = append(slice1, v)
        }
    }
    return slice1
}

2.交集

func intersect(slice1, slice2 []string) []string {
    m := make(map[string]int)
    nn := make([]string, 0)
    for _, v := range slice1 {
        m[v]++
    }
 
    for _, v := range slice2 {
        times, _ := m[v]
        if times == 1 {
            nn = append(nn, v)
        }
    }
    return nn
}

3.補集

func difference(slice1, slice2 []string) []string {
    m := make(map[string]int)
    nn := make([]string, 0)
    inter := intersect(slice1, slice2)
    for _, v := range inter {
        m[v]++
    }
 
    for _, value := range slice1 {
        times, _ := m[value]
        if times == 0 {
            nn = append(nn, value)
        }
    }
    return nn
}

?? 條件語句

1.if

a := 1
// 如果a等于1 執(zhí)行條件
if a == 1 {
  fmt.Println("a等于1")
}

2.if - else if

a := 1
// 如果a等于1執(zhí)行1 如果a等于2執(zhí)行2
if a == 1 {
  fmt.Println("a等于1")
} else if a == 2 {
  fmt.Println("a等于2")
}

3.if - else if - else

a := 1
// 如果都不等 執(zhí)行else
if a == 1 {
  fmt.Println("a等于1")
} else if a == 2 {
  fmt.Println("a等于2")
} else {
  fmt.Println("a既不等于1也不等于2")
}

?? 循環(huán)語句

1.for

for i := 0; i < 10; i++ {
  fmt.Println(i)
}

// 遍歷數(shù)組
for i, v := range []int{1, 2, 3, 4} {
  fmt.Println("下標 ", i)
  fmt.Println("值", v)
}

// 遍歷字典
my_dic := map[string]string{"name": "張三", "age": "18"}
fmt.Println(my_dic)

for k, v := range my_dic {
  // key
  fmt.Println(k)
  // value
  fmt.Println(v)
}

2.while

// go沒有while 但是可以用for代替
for i := 0; ; i++ {
  fmt.Println(i)
  if i == 1000 {
    break
  }
}

?? 類和對象

1.類

type Person struct {
    
}

2.定義成員變量

type Person struct {
    name string
    age int
}

// 實例化
func main() {
    per := Person{"張三", 18}
}

3.定義構(gòu)造函數(shù)

// go沒有構(gòu)造函數(shù) 但是可以單獨寫一個方法代替
type Person struct {
    name string
    age int
}

func NewPerson(name string, age int) Person {
    return Person{name, age}
}
        
func main() {
    per := NewPerson("張三", 18)
    fmt.Println(per)
}

4.定義方法

func (this *Person)say()  {
    fmt.Println("人說")
}

// 調(diào)用
func main() {
    per := Person{"張三", 18}
    per.say()
}

5.繼承

type Student struct {
    Person
    id int
}

// 實例化
func main() {
    per := Person{"張三", 18}
    per.say()
    stu := Student{per, 1}
    fmt.Println(stu) // {{張三 18} 1}
}

6.重寫方法

type Student struct {
    Person
    id int
}

func (this *Student)say()  {
    fmt.Println("學生說")
}

func main() {
    per := Person{"張三", 18}
    per.say()
    stu := Student{per, 1}
    stu.say() // 學生說
}

finally enjoy it.

by objcat

2021.04.27

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滨彻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挪蹭,更是在濱河造成了極大的恐慌亭饵,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梁厉,死亡現(xiàn)場離奇詭異辜羊,居然都是意外死亡,警方通過查閱死者的電腦和手機词顾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門八秃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人计技,你說我怎么就攤上這事喜德。” “怎么了垮媒?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵舍悯,是天一觀的道長航棱。 經(jīng)常有香客問我,道長萌衬,這世上最難降的妖魔是什么饮醇? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮秕豫,結(jié)果婚禮上朴艰,老公的妹妹穿的比我還像新娘。我一直安慰自己混移,他們只是感情好祠墅,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歌径,像睡著了一般毁嗦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上回铛,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天狗准,我揣著相機與錄音,去河邊找鬼茵肃。 笑死腔长,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的验残。 我是一名探鬼主播捞附,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胚膊!你這毒婦竟也來了故俐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤紊婉,失蹤者是張志新(化名)和其女友劉穎药版,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喻犁,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡槽片,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肢础。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片还栓。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖传轰,靈堂內(nèi)的尸體忽然破棺而出剩盒,到底是詐尸還是另有隱情,我是刑警寧澤慨蛙,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布辽聊,位于F島的核電站纪挎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跟匆。R本人自食惡果不足惜异袄,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玛臂。 院中可真熱鬧烤蜕,春花似錦、人聲如沸迹冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叁巨。三九已至斑匪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锋勺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工狡蝶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庶橱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓贪惹,卻偏偏與公主長得像苏章,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奏瞬,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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