go語言快速入門

代碼倉庫

gitee

如何運行

以打印hello world為例

// main.go
package main // package為main的文件可以直接運行import "fmt"func main() {fmt.Println("Hello, World!")
}
# 直接運行
go run main.go
# 或者編譯后運行
go build main.go
./main.exe

變量定義和數據類型

變量是一個指向內存中某個地址的標識符, 一般用來存放數據.
數據類型就是表示某個變量的類型, 類型決定這個變量在內存中所占的空間大小.
賦值就是將數據(值)存放到變量所指向的地址中, 后續就可以用這個變量來獲取該數據

package mainimport "fmt"func main() {// 聲明并初始化一個整數變量var age int = 25fmt.Println("Age:", age)// 聲明并初始化一個浮點數變量var height float64 = 1.75fmt.Println("Height:", height)// 聲明并初始化一個字符串變量var name stringname = "Alice"fmt.Println("Name:", name)// 聲明并初始化一個布爾變量isStudent := true // 自動類型推斷, 最常用的聲明變量的方式fmt.Println("Is student:", isStudent)
}

流程控制

流程控制就是定義我們程序的執行順序

順序

順序執行就從上到下依次執行, 這個是我們程序的正常執行流程

package mainimport "fmt"func main() {fmt.Println("Step 1")fmt.Println("Step 2")fmt.Println("Step 3")
}

選擇

選擇就是根據滿足不同的條件來執行不同的代碼
選擇的流程分為單分支和多分支

單分支

單分支指的是只有一個分支節點, 只有一次條件判斷

package mainimport "fmt"func main() {var score int = 85if score >= 60 {fmt.Println("Pass")} else {fmt.Println("Fail")}
}

多分支

多分支則是有多個分支節點, 多個條件判斷

package mainimport "fmt"func main() {var score int = 85if score >= 90 {fmt.Println("A")} else if score >= 80 {fmt.Println("B")} else if score >= 70 {fmt.Println("C")} else {fmt.Println("D")}
}

循環

循環表示一個重復執行的過程

package mainimport "fmt"func main() {// 定義臨時變量i, 初始值為1, 循環條件為i小于等于5for i := 1; i <= 5; i++ {fmt.Println(i)}
}

函數

函數的本質是一個閉包, 有自己的作用域
我們可以用函數定義一段代碼, 接收0或多個輸入, 執行函數體內的代碼, 在結束時返回0或多個輸出
使用函數可以提取公共邏輯, 簡化我們的代碼

package mainimport "fmt"// 定義一個函數,接收兩個整數參數,返回它們的和
func add(a int, b int) int {return a + b
}func main() {result := add(5, 3)fmt.Println("Result:", result) // 輸出: Result: 8
}

類/結構體

類/結構體

類是一個包含了數據和方法(函數)的抽象結構, 我們可以定義它, 要使用類, 需要將類實例化, 其實就是在內存中開辟指定大小的空間來保存它
類的大小取決于內部定義什么數據(比如int), 編譯器會自動根據數據大小來決定分配多少空間
一個類可以有多個實例化對象, 也就是有多個不同變量, 但是這些變量都和這個類的結構一致

package mainimport "fmt"// 定義一個結構體 Person,包含 Name 和 Age 字段
type Person struct {Name stringAge  int
}// 為 Person 添加一個方法 SayHello
func (p Person) SayHello() {fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}func main() {// 創建一個 Person 實例person := Person{Name: "Alice", Age: 25}// 調用方法person.SayHello() // 輸出: Hello, my name is Alice and I am 25 years old.
}

接口

package mainimport "fmt"// 定義一個接口 Animal,包含一個 Speak 方法
type Animal interface {Speak() string // 所有實現 Speak() 方法的類型都可以看作是 Animal 類型
}// 定義一個結構體 Dog
type Dog struct {Name string
}// 為 Dog 實現 Speak 方法
func (d Dog) Speak() string {return "Woof! My name is " + d.Name
}// 定義一個結構體 Cat
type Cat struct {Name string
}// 為 Cat 實現 Speak 方法
func (c Cat) Speak() string {return "Meow! My name is " + c.Name
}func main() {// 聲明一個 Animal 接口變量var a Animal// 創建一個 Dog 實例dog := Dog{Name: "Buddy"}a = dog // 因為 Dog 實現了 Animal 接口,所以可以賦值給 afmt.Println(a.Speak()) // 輸出: Woof! My name is Buddy// 創建一個 Cat 實例cat := Cat{Name: "Whiskers"}a = cat // Cat 同樣實現了 Animal 接口fmt.Println(a.Speak()) // 輸出: Meow! My name is Whiskers// 可以將不同類型的對象統一處理animals := []Animal{dog, cat}for _, animal := range animals {fmt.Println(animal.Speak())}
}

框架

為了簡化開發, 程序員會提取公共邏輯, 封裝成函數, 或者封裝成類和方法, 簡化開發, 在這個不斷簡化的過程中就誕生了框架
不過以我的理解, 庫(library)是提取公共方法和類的工具集合, 用戶可以以自己的喜好添加很多不同的庫來使用; 而框架(framework)
更像是定義了一套項目規范和模板,然后用戶在框架的基礎上遵守框架約定的標準或結構進行開發; 不過很多時候這個界限不是很清晰,
兩個詞經常混用

web

我們目前寫的程序都是在本地運行的, 為了讓世界各地的用戶也能使用, 就需要開放到網絡, 而web框架, 就是封裝了語言本身提供的網絡庫,
然后提供了開放網絡服務的各種方法
go語言常用的web框架為gin

go get "github.com/gin-gonic/gin"
package mainimport ("github.com/gin-gonic/gin"
)func main() {// 創建一個默認的路由引擎r := gin.Default()// 定義一個 GET 接口r.GET("/hello", func(c *gin.Context) {c.JSON(200, gin.H{"message": "Hello from Gin!",})})// 啟動 HTTP 服務,默認在 0.0.0.0:8080r.Run(":8080")
}

訪問localhost:8080/hello查看

db

我們目前都是使用變量來存儲數據, 但是變量的數據是放在內存中的, 一旦程序停止, 內存中的數據就會被回收, 下一次啟動程序,
操作系統分配的也可能是另一個內存空間, 所以我們需要持久化存儲我們的數據, 這就需要用到數據庫系統

go語言常用的數據庫框架為gorm

go get "gorm.io/driver/sqlite" "gorm.io/gorm" "github.com/glebarez/sqlite"
package mainimport ("github.com/glebarez/sqlite"// 需要 go env -w CGO_ENABLED=1// 并且需要gcc, 不過這個是官方實現, 比較好// "gorm.io/driver/sqlite""gorm.io/gorm"
)// 定義一個結構體,對應數據庫表
type User struct {gorm.ModelName  stringEmail string `gorm:"unique"`
}func main() {// 連接 SQLite 數據庫(文件名為 test.db)db, err := gorm.Open(sqlite.Open("./dev.db"), &gorm.Config{})if err != nil {panic("failed to connect database")}// 自動遷移 schemadb.AutoMigrate(&User{})// 創建記錄db.Create(&User{Name: "Alice", Email: "alice@example.com"})// 查詢記錄var user Userdb.Where("name = ?", "Alice").First(&user)println("Found user:", user.Name)// 更新記錄db.Model(&user).Update("Name", "Bob")// 刪除記錄db.Delete(&user)
}

擴展

○ 多線程/微服務/反射-動態代理/文件操作/網絡編程/
○ 框架的原理/手寫
○ wasm/grpc

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

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

相關文章

使用麒麟V10操作系統的KVM服務,但麒麟V10存在高危漏洞無法修復?

麒麟V10操作系統之KVM部署虛擬機_麒麟v10安裝kvm-CSDN博客文章瀏覽閱讀3.7k次&#xff0c;點贊30次&#xff0c;收藏25次。本文介紹了在麒麟V10操作系統上部署KVM虛擬機的詳細步驟&#xff0c;包括檢查虛擬化支持、安裝KVM組件、創建虛擬機、配置網絡橋接&#xff0c;以及解決可…

PG、SprinBoot項目報錯,表不存在

1、用戶名密碼錯誤 2、數據庫IP和數據庫名稱錯誤 3、類似于如下的表結構 PG 默認掃描PUBLIC下面的表&#xff0c;需要手動指定schema&#xff0c;currentSchemaswdn_new url: jdbc:postgresql://${PGSQL_HOST:127.0.0.1}:${PGSQL_PORT:5432}/swdn_new?currentSchemaswdn_ne…

python類成員概要

python類成員概要 python類成員分類如圖&#xff1a; 簡要說明&#xff1a; 1.實例變量&#xff08;Instance Variables&#xff09; 定義&#xff1a;在方法中通過 self.變量名 聲明&#xff0c;屬于單個實例 特點&#xff1a;每個實例擁有獨立副本&#xff0c;在實例間不共…

Java性能問題排查

1. Java 性能排查 使用JPS查看當前Java進程 jps #查詢需要排查的Java進程ID查看Java進程內最耗費CPU的線程資源使用情況 top -H -p <Java進程pid>ps -Lfp <Java進程pid>ps -mp <Java進程pid> -o THREAD, tid, time根據第1步查詢出的PID&#xff0c;通過jstac…

基于OpenCV和深度學習實現圖像風格遷移

文章目錄 引言一、準備工作二、代碼實現解析1. 讀取和顯示原始圖像2. 圖像預處理3. 加載和運行風格遷移模型4. 處理輸出結果 三、效果展示四、擴展應用五、總結 引言 圖像風格遷移是計算機視覺中一個非常有趣的應用&#xff0c;它可以將一幅圖像的內容與另一幅圖像的藝術風格相…

SwiftUI隱藏返回按鈕保留右滑手勢方案

SwiftUI 隱藏返回按鈕但保留右滑返回手勢的方案 在 SwiftUI 中&#xff0c;如果你使用&#xff1a; .navigationBarBackButtonHidden(true)可以隱藏系統返回按鈕&#xff0c;但會發現 右滑返回手勢&#xff08;邊緣返回&#xff09;失效了。 這是因為 SwiftUI 底層使用了 UI…

練習小項目11:鼠標跟隨小圓點

&#x1f3af; 項目目標&#xff1a; 當鼠標在頁面移動時&#xff0c;小圓點會跟隨鼠標移動的位置&#xff0c;帶有平滑動畫。 &#x1f9e0; 實現思路&#xff1a; HTML&#xff1a; 頁面內放一個 div 作為圓點。 CSS&#xff1a; 圓點使用絕對定位&#xff0c;初始在屏幕…

華為:eSight網管平臺使用snmp納管交換機

一、SNMP簡介 SNMP&#xff08;Simple Network Management Protocol&#xff0c;簡單網絡管理協議&#xff09;是一種用于管理和監控網絡設備的標準協議&#xff0c;廣泛應用于路由器、交換機、服務器、打印機等網絡設備的管理場景。以下是對它的簡單介紹&#xff1a; 1、SNM…

【單片機期末】接口及應用

一、C51語言基礎 【考點】存儲類型 data是低128字節 code是ROM idata是高128字節 pdata是外部RAM可以用R0 R1尋址的&#xff0c;也叫頁 xdata是外部RAM&#xff0c;可以用DPTR尋址或總線擴展 其中data、code、idata、pdata、xdata均為字節類型的&#xff0c;bdata是對位尋址的 …

C#迭代器

文檔 C# Iterators 關鍵內容 普通接口 public interface IEnumerable {IEnumerator GetEnumerator(); }public interface IEnumerator {object Current { get; }bool MoveNext();void Reset(); }泛型接口 public interface IEnumerable<out T> : IEnumerable {IEnum…

Java多線程:為什么wait()必須用循環而非if?

在Java多線程編程中&#xff0c;調用wait()方法時應使用**循環結構&#xff08;while循環&#xff09;**而非if塊&#xff0c;這是由線程同步的特性和潛在風險決定的。以下是具體原因和實現規范&#xff1a; 一、正確調用方式 synchronized (lockObject) {while (!condition) …

Fiori 初學記錄----怎么調用后端系統odata 服務實現簡單的CURD

1.對上面的內表做一個簡單的增刪改查的操作 SEGW 創建odata 項目&#xff0c;實現增刪改查方法。如下圖 2.odata 準備完畢后&#xff0c;打開vscode 下一步等待項目生成 把下面這個目錄的視圖&#xff1a;替換一下&#xff1a; View1.view.xml 代碼&#xff1a; <…

OpenCV CUDA模塊圖像變形------對圖像進行GPU加速的仿射變換函數warpAffine()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對圖像進行 GPU 加速的仿射變換&#xff08;Affine Transformation&#xff09;&#xff0c;是 cv::warpAffine 的 CUDA 版本。支持平…

語音增強方法

一、音量增強 音量增強&#xff0c;顧名思義就是音量的調大和調小&#xff0c;通過對音量進行增強可以使得模型更好的泛化。防止數據只有小音量時&#xff0c;當有大音量傳入時模型不能很好的進行識別。 下面是我對音量增強生成頻譜圖進行可視化的結果 上面的一個圖片是音量…

內網滲透測試技巧與利用操作手冊(SMB / MSSQL / LDAP)

SMB 枚舉與利用清單 &#x1f50d; SMB 枚舉與連接 # 嘗試空會話連接&#xff08;Null Session&#xff09; smbclient -N -U "" -L \\<IP> smbclient -N -U "test" -L \\<IP> smbclient -N -U "Guest" -L \\<IP># 下載共享…

ADB(Android Debug Bridge)Android官方調試工具及常用命令

ADB的定義 ADB&#xff08;Android Debug Bridge&#xff09;是Android官方提供的調試工具&#xff0c;屬于Android SDK的一部分。它通過命令行與Android設備通信&#xff0c;支持安裝應用、調試、文件傳輸、日志抓取等功能&#xff0c;適用于開發、測試及高級用戶場景。 ADB工…

再現重大BUG,微軟緊急撤回Win 11六月更新

BUG年年有&#xff0c;今年特別多&#xff01; Windows 11發布這近4年來&#xff0c;咱們算是一路見證了其「要么在修復BUG&#xff0c;要么在修復BUG路上」這么一件壯舉。 最新的6月Windows 11 24H2更新&#xff08;版本號KB5060842&#xff09;&#xff0c;微軟帶來了多項改…

ROS2 工作空間中, CMakeLists.txt, setup.py和 package.xml的作用分別是?

提問 ROS2 工作空間中, CMakeLists.txt&#xff0c; setup.py和 package.xml的作用分別是&#xff1f; 回答 在一個 ROS 2 包&#xff08;package&#xff09;里&#xff0c;這三個文件各司其職&#xff1a; package.xml 作用&#xff1a;聲明包的元信息和依賴關系&#xff…

Untiy打包安卓踩坑

Untiy 版本&#xff1a;unity6.1 運行環境&#xff1a;Win11 報錯一&#xff1a; Assembly ‘Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll’ will not be loaded due to errors: 解決方法&#xff1a;通過在 Unity Hub 中下載 iOS 包來解決 報錯…

2025最新版!Windows Python3 超詳細安裝圖文教程(支持 Python3 全版本)

大家好&#xff0c;我是你們的編程搬磚工~ 今天給大家安排一篇超級詳細、超接地氣、純小白友好的《Python 安裝教程 for Windows》&#xff0c;從下載到安裝&#xff0c;從環境變量到驗證&#xff0c;手把手帶你裝好 Python&#xff0c;不管你是 Python3.7、3.9、3.10 還是 3.1…