在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在學(xué)習(xí)go語言的過程踩過的坑

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2024-11-11 09:22 ? 次閱讀

作為一個(gè)5年的phper,這兩年公司和個(gè)人都在順應(yīng)技術(shù)趨勢(shì),新項(xiàng)目慢慢從php轉(zhuǎn)向了go語言,從2021年到現(xiàn)在,筆者手上也先后開發(fā)了兩個(gè)go項(xiàng)目。在學(xué)習(xí)go語言的過程中也學(xué)習(xí)并總結(jié)了一些相關(guān)的東西,這篇文章就分享下自己踩過的一些坑吧。

1、函數(shù)的寫法

問題:

func main()
{
fmt.Println("php是世界上最好的語言")
}

解決:
如上所示,這種函數(shù)的定義寫法,在go語言中是錯(cuò)誤的,就是 "{" 必須得和函數(shù)名在同一行。當(dāng)然,這種錯(cuò)誤在編輯器檢測(cè)語法的時(shí)候就會(huì)暴露出來了,正確寫法應(yīng)該如下所示:

func main() {
fmt.Println("php是世界上最好的語言")
}

2、map定義和初始化

問題:

func main() {
var m map[string]string
m["php"] = "世界上最好的語言"
m["go"]  = "世界上最好的語言"
fmt.Println(m)
}

解決:
如上所示,這種定義了map,然后直接使用的方式是錯(cuò)誤的,會(huì)拋出一個(gè)panic。少了一個(gè)重要的步驟,必須使用make()函數(shù)去給map分配內(nèi)存空間,才能使用。這個(gè)對(duì)于phper來說,剛開始可能會(huì)經(jīng)常忘掉。正確使用方式如下:

func main() {
m := make(map[string]string, 2)
m["php"] = "世界上最好的語言"
m["go"]  = "世界上最好的語言"
fmt.Println(m)
}

3、json格式轉(zhuǎn)換

問題:

type Student struct {
id    int
name  string
score int
}

func main() {
s := Student{1, "小明", 99}
jsonS, _ := json.Marshal(s)
fmt.Println(string(jsonS))
}

解決:
在做web開發(fā)過程中,基本上每天都要和json格式數(shù)據(jù)打交道,所以學(xué)會(huì)轉(zhuǎn)換成json格式的數(shù)據(jù)是必備技能啊。但上面的寫法是錯(cuò)誤的,打印出來的為空值。這是因?yàn)镾tudent結(jié)構(gòu)體中的元素都是小寫的,對(duì)外是不可訪問的,所以必須改成大寫的,才能對(duì)外輸出json格式的數(shù)據(jù)。正確寫法如下:

type Student struct {
Id    int
Name  string
Score int
}

func main() {
s := Student{1, "小明", 99}
jsonS, _ := json.Marshal(s)
fmt.Println(string(jsonS))
}

4、循環(huán)中處理業(yè)務(wù)問題

問題:

func main() {
data := []int{1, 2, 3}
for _, value := range data {
value += 1
}
fmt.Println(data)
}

解決:
如上所示,我們本身是想對(duì)data里面的元素做加1操作的,但發(fā)現(xiàn)沒有成功。那是因?yàn)椋覀冄h(huán)所引用的變量是臨時(shí)變量,去修改的時(shí)候并不會(huì)改變數(shù)組中的原有結(jié)構(gòu)。正確的做法應(yīng)該是根據(jù)切片的索引去修改,其實(shí)就類似于php的foreach,改變數(shù)組中的值,也是需要根據(jù)索引去改的。如下所示:

func main() {
data := []int{1, 2, 3}
for key := range data {
data[key] += 1
}
fmt.Println(data)
}

5、數(shù)組和切片的區(qū)別

問題:

func change(data [2]int) {
data[0] = 4
}

func main() {
data := [2]int{1, 2}
change(data)
fmt.Println(data)
}

解決:
如上所示,運(yùn)行的結(jié)果是[1 2] ,而不是[4 2] 。原因是main方法中聲明的data是數(shù)組,而go語言中的參數(shù)傳遞是值傳遞,所以不會(huì)改變?cè)械臄?shù)組值。如果需要實(shí)現(xiàn)上述效果,可以改用切片,因?yàn)榍衅旧聿粫?huì)存儲(chǔ)數(shù)據(jù),他的底層數(shù)據(jù)會(huì)指向一個(gè)底層數(shù)組,因此在修改切片的元素時(shí),會(huì)修改底層數(shù)組的相應(yīng)元素,同時(shí)共享同一個(gè)底層數(shù)組的切片也會(huì)相應(yīng)修改。正確做法如下所示:

func change(data []int) {
data[0] = 4
}

func main() {
data := []int{1, 2}
change(data)
fmt.Println(data)
}

6、:= 聲明和初始化變量

問題:

func main() {
flag := 1
if true {
flag := 2
flag++
}
fmt.Println(flag)
}

解決:
如上所示,運(yùn)行結(jié)果仍然是1,而不是2或者3。上述代碼中,flag := 2,又重新聲明了一個(gè)變量flag,但它作用的僅僅是if 判斷邏輯里面的,并沒有作用到整個(gè)main函數(shù)全局中。如果要正確影響,應(yīng)將 := 改為 =,如下所示,結(jié)果則為3:

func main() {
flag := 1
if true {
flag = 2
flag++
}
fmt.Println(flag)
}

總結(jié):以上,就是本人在實(shí)際開發(fā)中,結(jié)合自己所學(xué),遇到的一些比較常見的坑點(diǎn)了。當(dāng)然,也是比較基礎(chǔ)的一些點(diǎn)。后面,我也會(huì)繼續(xù)深入學(xué)習(xí)go,總結(jié)更多的經(jīng)驗(yàn)!

一個(gè)人可以被毀滅,但不可以被打敗。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4341

    瀏覽量

    62799
  • go語言
    +關(guān)注

    關(guān)注

    1

    文章

    158

    瀏覽量

    9058

原文標(biāo)題:go新手常踩的坑

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自然語言處理與機(jī)器學(xué)習(xí)的關(guān)系 自然語言處理的基本概念及步驟

    自然語言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能和語言學(xué)領(lǐng)域的一個(gè)分支,它致力于研究如何讓計(jì)算機(jī)能夠理解、解釋和生成人類語言。機(jī)器學(xué)習(xí)(Ma
    的頭像 發(fā)表于 12-05 15:21 ?584次閱讀

    ADC高速采樣電路設(shè)計(jì)詳解之STM32

    一、過程 最近用STM32F334做數(shù)字電源,用到了高速ADC采集電壓電流。設(shè)計(jì)的參考電壓VREF為3.3V,輸入信號(hào)經(jīng)運(yùn)放跟隨后直接接入單片機(jī)的采樣通道。一開始測(cè)試一切正常,但隨著輸入信號(hào)
    的頭像 發(fā)表于 12-02 09:27 ?1047次閱讀
    ADC高速采樣電路設(shè)計(jì)詳解之STM32<b class='flag-5'>踩</b><b class='flag-5'>坑</b>

    go語言如何解決并發(fā)問題

    作為一個(gè)后端開發(fā),日常工作中接觸最多的兩門語言就是PHP和GO了。無可否認(rèn),PHP確實(shí)是最好的語言(手動(dòng)狗頭哈哈),寫起來真的很舒爽,沒有任何心智負(fù)擔(dān),字符串和整型壓根就不用區(qū)分,開發(fā)速度真的是比
    的頭像 發(fā)表于 10-23 13:38 ?152次閱讀
    <b class='flag-5'>go</b><b class='flag-5'>語言</b>如何解決并發(fā)問題

    三十分鐘入門基礎(chǔ)Go Java小子版

    語法與 C 相近,但功能上有:內(nèi)存安全,GC,結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。 適用范圍 本篇文章適用于學(xué)習(xí)其他面向?qū)ο?b class='flag-5'>語言(Java、Php),但沒有學(xué)過Go
    的頭像 發(fā)表于 08-12 14:32 ?759次閱讀
    三十分鐘入門基礎(chǔ)<b class='flag-5'>Go</b> Java小子版

    倉(cāng)頡語言書籍申請(qǐng)

    有接觸其它的語言,主要是python,python用于機(jī)器學(xué)習(xí),數(shù)據(jù)分析是能滿足使用,但是用于開發(fā)其他的東西就不能滿足了,我現(xiàn)在想學(xué)習(xí)另外一種語言
    發(fā)表于 08-06 08:37

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)知識(shí)學(xué)習(xí)

    今天來學(xué)習(xí)語言模型在自然語言理解方面的原理以及問答回復(fù)實(shí)現(xiàn)。 主要是基于深度學(xué)習(xí)和自然語言處理技術(shù)。 大
    發(fā)表于 08-02 11:03

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 俯瞰全書

    的機(jī)會(huì)! 本人曾經(jīng)也參與語音識(shí)別產(chǎn)品的開發(fā),包括在線和離線識(shí)別,但僅是應(yīng)用語言模型實(shí)現(xiàn)端側(cè)的應(yīng)用開發(fā),相當(dāng)于調(diào)用模型的接口函數(shù),實(shí)際對(duì)模型的設(shè)計(jì)、訓(xùn)練和運(yùn)行機(jī)理并不了解,我想通過學(xué)習(xí)《大語言
    發(fā)表于 07-21 13:35

    按照這樣學(xué)習(xí)C語言,成為卷王不是夢(mèng)!

    一些學(xué)習(xí)C語言的建議,讓你在學(xué)習(xí)之路上更加游刃有余,成為C語言的高手。按照這樣學(xué)習(xí)C語言,成為卷
    的頭像 發(fā)表于 07-06 08:04 ?335次閱讀
    按照這樣<b class='flag-5'>學(xué)習(xí)</b>C<b class='flag-5'>語言</b>,成為卷王不是夢(mèng)!

    M16連接器12芯采購(gòu)如何避免

      德索工程師說道在M16連接器12芯的采購(gòu)過程中,為了避免,確保采購(gòu)的順利進(jìn)行以及產(chǎn)品的高質(zhì)量,我們可以從以下幾個(gè)方面進(jìn)行考慮和規(guī)劃:
    的頭像 發(fā)表于 06-07 17:46 ?818次閱讀
    M16連接器12芯采購(gòu)如何避免<b class='flag-5'>踩</b><b class='flag-5'>坑</b>

    語言模型:原理與工程時(shí)間+小白初識(shí)大語言模型

    開拓深度學(xué)習(xí)的思路。對(duì)于新涌現(xiàn)的大語言模型的能力,主要是表現(xiàn)在學(xué)習(xí)能力的提升、語言理解和生成能力、創(chuàng)新和探索的能力。 基礎(chǔ)技術(shù) 詞表示技術(shù) 詞表示一般分為三種,主要是詞的獨(dú)熱表示(On
    發(fā)表于 05-12 23:57

    家庭路由器如何選?實(shí)用技巧讓你不再

    家庭路由器選購(gòu)需考慮需求、預(yù)算、性能指標(biāo)、硬件配置、軟件功能、認(rèn)證與測(cè)試及售后服務(wù)。明確需求,選擇適合的型號(hào)和品牌,確保網(wǎng)絡(luò)穩(wěn)定、高速。遵循這些技巧,避免,享受網(wǎng)絡(luò)便利。
    的頭像 發(fā)表于 04-29 11:38 ?725次閱讀

    關(guān)于go中接口類型的表示方法

    go是一個(gè)靜態(tài)性語言,每個(gè)變量都有靜態(tài)的類型,因此每個(gè)變量在編譯階段中有明確的變量類型,比如像:int、float32、MyType。
    的頭像 發(fā)表于 04-28 10:13 ?390次閱讀

    痛苦“電池電壓偵測(cè)電路”,含淚總結(jié)設(shè)計(jì)要點(diǎn)

    和大家分享這個(gè)電路的設(shè)計(jì)要點(diǎn),以及當(dāng)時(shí)的設(shè)計(jì)失誤,幫助大家積累經(jīng)驗(yàn),以后不要這種。 設(shè)計(jì)要點(diǎn)一:設(shè)定分壓電阻的大小 這種便攜式掌上閱讀器,當(dāng)然是內(nèi)置鋰電池的:
    的頭像 發(fā)表于 04-07 14:31 ?3771次閱讀
    痛苦<b class='flag-5'>踩</b><b class='flag-5'>坑</b>“電池電壓偵測(cè)電路”,含淚總結(jié)設(shè)計(jì)要點(diǎn)

    學(xué)習(xí)筆記|如何用Go程序采集溫濕度傳感器數(shù)據(jù)

    在共創(chuàng)社內(nèi)部的交流中,先前有一位成員展示了如何借助C語言來實(shí)現(xiàn)對(duì)AHT20溫濕度傳感器數(shù)據(jù)的讀取。這一實(shí)例觸發(fā)了另一位共創(chuàng)官的靈感,他決定采納Go語言重新構(gòu)建這一數(shù)據(jù)采集流程。接下來,我們將詳細(xì)解析
    的頭像 發(fā)表于 03-21 11:46 ?755次閱讀
    <b class='flag-5'>學(xué)習(xí)</b>筆記|如何用<b class='flag-5'>Go</b>程序采集溫濕度傳感器數(shù)據(jù)

    高低溫試驗(yàn)箱選購(gòu)指南—防秘籍

    選購(gòu)高低溫試驗(yàn)箱需要綜合考慮多方面因素。通過明確需求、選擇知名品牌、對(duì)比性能指標(biāo)、權(quán)衡價(jià)格與性價(jià)比、保障售后服務(wù)以及參考用戶評(píng)價(jià)與案例等步驟,可以幫助您避免風(fēng)險(xiǎn),選購(gòu)到一款性價(jià)比高、適合自己需求的高低溫試驗(yàn)箱。
    的頭像 發(fā)表于 02-24 09:22 ?618次閱讀
    高低溫試驗(yàn)箱選購(gòu)指南—防<b class='flag-5'>踩</b><b class='flag-5'>坑</b>秘籍
    主站蜘蛛池模板: 亚洲狠狠综合久久| 亚洲六月婷婷| 欧美男人天堂网| 欧美视频a| 亚洲最色网| 国产一级做a爱免费观看| 大片免费看| aa在线免费观看| bt天堂资源种子在线8| 成人特黄午夜性a一级毛片| a天堂中文在线官网| 一色屋精品免费视频 视频| 在线观看精品国产福利片100| 亚洲欧美在线视频免费| 特级aaa毛片| 日本三级网站在线观看| 高清一区二区| 亚洲欧美精品一区二区| 男女交性视频免费| 亚洲乱码中文字幕综合| 色婷婷亚洲综合五月| 欧美.成人.综合在线| 天天色天天摸| 亚洲免费资源| 精品一区 二区三区免费毛片| 国产激情片| 久久夜色精品国产亚洲噜噜| 国产欧美一区二区三区观看| 72种姿势欧美久久久久大黄蕉| 殴美一级| 天天干网址| seba51久久精品| 天天色天天看| 2018国产精品| 久操视频免费看| 亚洲精品九色在线网站| 天堂tv亚洲tv日本tv欧美人tv| 七月色婷婷| www.色偷偷| 免费久久久久| 日本黄色网址免费|