【Go】1、Go語言基礎

前言

????????本系列文章參考自稀土掘金上的 【字節內部課】公開課,做自我學習總結整理。


Go語言的特點

??????????Go語言由Google團隊設計,以簡潔、高效、并發友好為核心目標。

??????????具有以下優點:

  1. 語法簡單、學習曲線平緩:語法關鍵字很少,且容易記憶。

  2. 豐富的標準庫:大多數情況下不需要外部引入第三方庫,直接使用內置標準庫即可。

  3. 完善的工具鏈:包管理、代碼格式化、測試、性能分析、文檔生成、依賴管理等等,應有盡有。

  4. 靜態鏈接:部署簡單,跨平臺性強,安全穩定。

  5. 高性能、高并發:接近c的性能,低內存開銷。

????????下文將介紹Go語言的基本語法,個人感覺更是Go語言現代化(甚至有點超現代化)的體現。


數據類型

????????Go語言常用的數據類型:

類型分類

類型名稱

關鍵字/定義

默認值(零值)

特點

布爾型

bool

bool

false

只能為 truefalse

整數型

有符號整數

int, int8, int16, int32, int64

0

根據平臺不同,int 可能為 32 或 64 位

無符號整數

uint, uint8, uint16, uint32, uint64

0

無負數范圍

浮點型

float32, float64

float32, float64

0.0

float64 精度更高

字符/字節型

byte(別名)

byte

0

uint8 的別名

rune(別名)

rune

0

int32 的別名

字符串型

string

string

""

不可變,UTF-8 編碼

錯誤類型

error

error

nil

內置接口類型,表示錯誤狀態


一、變量定義

????????Go語言的變量定義方式有很多種:

1. var name type :用于顯式定義變量。

var a, b int = 1, 2

2. name := val :用于隱式定義變量。

f := float32(e)

3. const name type = val : 用于常量定義

const s string = "constant"

二、選擇結構

????????選擇結構分為 if ,switch-case。

1.?if

if a == 1 {fmt.Println("真的")
}else {fmt.Println("假的")
}

2. switch-case

a := 2
switch a {
case 1:fmt.Println(1)
case 2:fmt.Println(2)
default:fmt.Println("default")
}

    三、循環結構

    ????????Go語言形式上只有for循環一種循環方式,但是可以改為類似于while的形式循環。

    for i := 1; i < 9; i++ {fmt.Print(i)
    }
    k := 1
    for k < 10 {k++fmt.Println(k)
    }

    四、數組

    ????????Go語言的數組和C很類似,定長數組。

    for i := 1; i < 9; i++ {fmt.Print(i)
    }
    k := 1
    for k < 10 {k++fmt.Println(k)
    }

    五、切片

    ????????Go語言的切片類似于C++的vector、Java中的List,是一種變長數組。

    ????????并且支持類似Python中元組的操作語法。

    s := make([]string, 3)
    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    fmt.Println(s[2])
    fmt.Println(len(s))
    s = append(s, "d")
    s = append(s, "e", "f")
    fmt.Println(s)
    c := make([]string, len(s))
    copy(c, s)
    fmt.Println(c)
    fmt.Println(s[2:5])
    fmt.Println(s[:4])
    fmt.Println(s[2:])
    good := []string{"g", "h", "o"}    
    fmt.Println(good)

    六、Map

    ????????和各種語言的Map類似,用于存儲鍵值對。

    mp := make(map[string]int)
    mp["one"] = 1
    mp["two"] = 2
    r, ok := mp["unknow"]
    fmt.Println(r, ok)

    七、range

    ????????Go語言中的range類似于C++的auto,用于快速遍歷。

    nums := []int{2, 3, 4}
    sum := 0
    for i, num := range nums {sum += numif num == 2 {fmt.Println("idx:", i, "num:", num)}
    }
    fmt.Println(sum)
    m := map[string]string{"a": "A", "b": "B"}
    for k, v := range m {fmt.Println(k, v)
    }
    for k := range m {fmt.Println(k)
    }

    八、函數

    ????????Go語言的函數,個人認為是Go語言在語法上現代化的標志之一,支持多返回,非常方便。

    func add(a int, b int) (int, string) {return a + b, "ok"
    }

    九、指針

    ????????Go語言的指針類似C的指針,個人非常喜歡指針,一直覺得Java把指針完全去除了也是一個問題。

    ????????在語法上,*作為解引用、&作為引用。

    func add2(a *int) {*a += 2
    }

    十、結構體

    ????????Go語言提供結構體用于類型封裝,特殊的是,結構體方法在Go語言中需要寫在外面。

    type user struct {name     stringpassword string
    }
    func (this user) checkPassword(password string) bool {return this.password == password
    }

    十一、錯誤處理

    ????????Go語言為函數提供了一種新奇的try-catch方法。Go語言中,我們在某種方面來講是在面向異常編程。我們需要通過 error 類型將函數中的錯誤返回,然后手動處理。

    ????????Go語言提供了一個特殊變量 nil 用于判斷是否捕捉到了異常。

    func checkError(password string) (bool, error) {return password == "123", errors.New("not Found")
    }
    v, err := checkError("456")
    if err != nil {fmt.Println(v, err)
    } else {fmt.Print(v)
    }

    十二、特殊函數

    1. json處理

    type userInfo struct {Name stringAge  int `json:"age"`
    }
    func solve14() {a := userInfo{Name: "wang", Age: 18}buf, err := json.Marshal(a)if err != nil {panic(err)}fmt.Println(buf)fmt.Println(string(buf))var b userInfoerr = json.Unmarshal(buf, &b)if err != nil {panic(err)}fmt.Println(b)
    }

    2.?時間處理

    fmt.Println(time.Now())
    fmt.Println(time.Now().Unix())
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC))

    3.?字符串轉數字

    fmt.Println(strconv.ParseInt("111", 10, 64))
    fmt.Println(strconv.ParseFloat("111.11", 64)
    fmt.Println(strconv.ParseInt("0x1000", 0, 64
    fmt.Println(strconv.Atoi("111"))

    4.?獲取線程信息

    fmt.Println(os.Args)
    fmt.Println(os.Getenv("PATH"))

    ????????下篇將對學習的語法結合視頻進行綜合實踐。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/906674.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/906674.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/906674.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    AI時代的新營銷范式:生成式引擎優化(GEO)的崛起——品牌如何被大模型收錄

    在數字化浪潮席卷全球的今天&#xff0c;我們正站在一個前所未有的歷史拐點。如果說過去二十年&#xff0c;搜索引擎優化&#xff08;SEO&#xff09;重塑了企業與消費者的連接方式&#xff0c;那么未來二十年&#xff0c;生成式引擎優化&#xff08;GEO&#xff09;將徹底顛覆…

    實用藍牙耳機哪款好?先做好使用場景分析!

    市面上的藍牙耳機款式繁多&#xff0c;618到來之際&#xff0c;消費者如何選擇適合自己的藍牙耳機&#xff1f;實用藍牙耳機哪款好&#xff1f;關鍵在于做好使用場景分析&#xff01;今天&#xff0c;就帶大家結合不同的使用場景&#xff0c;分享三款倍思音頻的精品藍牙耳機。 …

    PTA刷題筆記3(微難,有詳解)

    7-15 計算圓周率 代碼如下&#xff1a; #include <stdio.h>int main() {double threshold;scanf("%lf", &threshold);double pi_over_2 1.0; // π/2的初始值&#xff08;第一項1&#xff09;double term 1.0; // 當前項的值int n 1; …

    基于SpringBoot+Vue的社區醫院信息平臺設計與實現

    項目背景與概述 隨著醫療健康信息化的發展&#xff0c;社區醫院的管理逐漸由傳統的手工模式轉向信息化管理。為了提高醫院的管理效率、減少人工操作、提升服務質量&#xff0c;開發一個高效且實用的社區醫院信息平臺顯得尤為重要。本系統基于Spring Boot框架與MySQL數據庫設計…

    舊物回收小程序:讓閑置煥發光彩,為生活增添價值

    你是否常常為家中堆積如山的閑置物品而煩惱&#xff1f;那些曾經心愛的物品&#xff0c;如今卻成了占據空間的“雞肋”&#xff0c;丟棄可惜&#xff0c;留著又無處安放。別擔心&#xff0c;一款舊物二手回收小程序將為你解決這一難題&#xff0c;讓閑置物品重新煥發光彩&#…

    掩碼與網關是什么?

    1. 子網掩碼&#xff08;Subnet Mask&#xff09; 作用&#xff1a;劃分“小區”范圍 想象你住在一個小區&#xff08;子網&#xff09;里&#xff1a; 小區門牌號 IP地址&#xff08;如 192.168.1.10&#xff09; 小區邊界 子網掩碼&#xff08;如 255.255.255.0&#xf…

    【Bluedroid】藍牙HID Host disconnect流程源碼解析

    本文基于 Android 藍牙 HID&#xff08;Human Interface Device&#xff09;Host 模塊的源碼&#xff0c;深入解析 HID 設備斷開連接的完整流程。重點覆蓋從應用層觸發斷開請求&#xff0c;到 BTIF 層&#xff08;接口適配層&#xff09;狀態校驗與異步傳遞、BTA 層&#xff08…

    python定時刪除指定索引

    腳本 import logging from datetime import datetime, timedelta from elasticsearch import Elasticsearch# 配置日志記錄 logging.basicConfig(filenamedelete_uat_indices.log,levellogging.INFO,format%(asctime)s - %(levelname)s - %(message)s )# Elasticsearch 集群的…

    GESP編程等級認證C++三級7-字符、字符數組與字符串2

    2.3 用字符串定義字符數組的好處 使用字符串定義字符數組需要額外考慮其末尾的“\0”&#xff0c;為什么還要使用這種看上去“麻煩”的方法呢&#xff1f;從圖5所示的代碼就能看出原因。 圖5 用字符串定義字符數組好處的代碼 從圖5中可以看出&#xff0c;a4是用字符串進行初始…

    EasyRTC音視頻實時通話WebP2P技術賦能的全場景實時通信解決方案

    一、技術背景 在數字化浪潮席卷全球的當下&#xff0c;實時通信技術憑借其即時性、高效性的優勢&#xff0c;已然成為推動各行業創新發展的核心動能。EasyRTC深度融合WebP2P技術&#xff0c;構建起去中心化的通信架構&#xff0c;實現了低延遲、高可靠的數據傳輸&#xff0c;為…

    Claude MCP協議從入門到精通

    目錄 一、什么是MCP協議? 二、Function Calling 和 MCP 協議的區別? 三、MCP相關網站 3.1 官方文檔 3.2 綜合型 MCP 資源聚合平臺 3.3 垂直領域 MCP Server 工具 3.4 開發者工具與社區 3.5 企業級服務與數據庫集成 3.6 新手友好型平臺 四、MCP 架構 4.1. MCP Hosts…

    YOLOv11改進 | Conv/卷積篇 | 2024 ECCV最新大感受野的小波卷積WTConv助力YOLOv11有效漲點

    YOLOv11改進 | Conv/卷積篇 | 2024 ECCV最新大感受野的小波卷積WTConv助力YOLOv11有效漲點 引言 在計算機視覺領域&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;的核心操作——卷積運算正經歷著革命性的變革。2024年ECCV會議提出的**小波卷積&#xff08;WTConv, Wav…

    英偉達CEO黃仁勛COMPUTEX 2025演講實錄:AI工廠時代已來,Blackwell架構全面投產

    5月19日&#xff0c;英偉達創始人兼首席執行官黃仁勛在臺北國際電腦展&#xff08;COMPUTEX 2025&#xff09;發表主題演講&#xff0c;系統闡述了英偉達從芯片設計向AI基礎設施服務商的戰略轉型&#xff0c;并披露了包括Blackwell架構升級、新一代AI計算平臺及機器人技術在內的…

    RabbitMQ的核心原理及應用

    在分布式系統架構中&#xff0c;消息中間件是實現服務解耦、流量緩沖的關鍵組件。RabbitMQ 作為基于 AMQP 協議的開源消息代理&#xff0c;憑借高可靠性、靈活路由和跨平臺特性&#xff0c;被廣泛應用于企業級開發和微服務架構中。本文將系統梳理 RabbitMQ 的核心知識&#xff…

    服務攻防矩陣

    4.1 中間件漏洞利用 WebLogic反序列化漏洞&#xff08;CVE-2023-21839&#xff09; 漏洞原理&#xff1a; T3協議反序列化未嚴格校驗&#xff0c;攻擊者可注入惡意序列化對象執行任意代碼。 攻擊流程&#xff1a; 使用ysoserial生成CommonsCollections6 payload&#xff1…

    PictureThis 解鎖高級會員版_v5.3.0 拍植物知名稱和植物百科

    PictureThis 解鎖高級會員版_v5.3.0 拍植物知名稱和植物百科 PictureThis是一款創新的植物識別與園藝指導應用程序&#xff0c;旨在幫助用戶快速識別植物種類、了解植物信息&#xff0c;并提供專業的園藝養護建議…

    大模型 Agent 就是文字藝術嗎?

    最近在技術圈里有一個很有趣的爭論&#xff1a;大模型 Agent 是不是就是各種 Prompt 的堆疊&#xff1f;像 Manus 這樣看起來很智能的 Agent&#xff0c;本質上是不是就是用巧妙的 Prompt 約束大模型生成更好的輸出&#xff1f;換句話說&#xff0c;這是不是一門文字藝術&#…

    LeetCode 1340. 跳躍游戲 V(困難)

    題目描述 給你一個整數數組 arr 和一個整數 d 。每一步你可以從下標 i 跳到&#xff1a; i x &#xff0c;其中 i x < arr.length 且 0 < x < d 。i - x &#xff0c;其中 i - x > 0 且 0 < x < d 。 除此以外&#xff0c;你從下標 i 跳到下標 j 需要滿…

    三相電壓的優勢,應用場景,功率測量

    三相系統概述 我國三相系統&#xff0c;由頻率相同&#xff0c;幅度類似的三個交流電壓組成&#xff0c;每個電壓相差120度。 三相系統的優勢 啟動電機&#xff1a;三個矢量間隔的電壓&#xff0c;在電機中產生旋轉磁場&#xff0c;不需要額外繞組就可以啟動電機。 減少線損…

    [原創](計算機數學)(The Probability Lifesaver)(P14): 推導計算 In(1-u) 約等于 -u

    [作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…