欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:開發(fā)語言 Golang快速上手

柚子快報邀請碼778899分享:開發(fā)語言 Golang快速上手

http://yzkb.51969.com/

背景

本文目的旨在,大家看完文章就能上手進行Golang的業(yè)務(wù)開發(fā)實現(xiàn)需求,屬于一篇Golang速成,如果有相關(guān)基礎(chǔ),后邊會再出一篇高級篇,用來給大家做一下比較深入的討論。

技術(shù)架構(gòu)

Golang的設(shè)計目標之一是提高開發(fā)效率和代碼可維護性,其技術(shù)架構(gòu)也反映了這一點。

標準庫

標準庫的數(shù)量和質(zhì)量常常決定了我們在開發(fā)過程中的上線,和其他主流開發(fā)語言一樣,Golang擁有豐富的標準庫,涵蓋了從輸入/輸出、字符串處理、網(wǎng)絡(luò)編程到數(shù)據(jù)序列化等各個方面。這使得開發(fā)者可以快速構(gòu)建功能齊全的應用程序,而無需依賴第三方庫。

并發(fā)模型

Golang的并發(fā)模型基于goroutine和channel。Goroutine是輕量級的線程,創(chuàng)建和銷毀的開銷很小。Channel則用于在goroutine之間傳遞消息和數(shù)據(jù),實現(xiàn)高效的并發(fā)編程。在使用channel來進行并發(fā)處理的時候,大家會發(fā)現(xiàn)實現(xiàn)極其簡單,不同水平的開發(fā)人員寫出的代碼幾乎相差無幾。

靜態(tài)類型

Golang是靜態(tài)類型語言,這意味著所有變量的類型在編譯時確定。

編譯和工具鏈

Golang的編譯器非常高效,可以快速編譯代碼生成可執(zhí)行文件。Golang的工具鏈還包括自動化測試、代碼格式化、靜態(tài)分析等工具,進一步提高了開發(fā)效率。同時還包含了RPC這種框架下的十分簡潔的上下游調(diào)用鏈,對于開發(fā)來說會是一個比較舒服的調(diào)用過程

基礎(chǔ)知識

ok,熱身完畢,現(xiàn)在我們來聊一下Golang的一些基礎(chǔ)知識,保證大家看完后可以立馬上手開發(fā)。 安裝和配置環(huán)境 要開始使用Golang,首先需要安裝Golang的開發(fā)環(huán)境。你可以從Golang官方網(wǎng)站下載并安裝相應版本。安裝完成后,配置環(huán)境變量: 下面展示一些 內(nèi)聯(lián)代碼片。

export PATH=$PATH:/usr/local/go/bin

第一個程序

一個典型的Golang程序如下:

package main

import "fmt"

func main() {

fmt.Println("Hello, World!")

}

上述代碼定義了一個簡單的main包,并在main函數(shù)中輸出"Hello, World!"。

包管理

Golang的包管理是Golang極具特色的一個能力,相比于Java中多模塊下多pom的管理方式,Golang的包管理更為簡潔 每個包代表一個獨立的功能模塊,可以被其他包導入和使用。包的定義如下:

package math

func Add(a int, b int) int {

return a + b

}

編譯和運行

使用go run命令可以直接運行Golang程序,當然如果用開發(fā)工具的話直接點點就可以了: go run main.go

使用go build命令可以編譯程序生成可執(zhí)行文件: go build -o myapp main.go

數(shù)據(jù)類型

Golang提供了豐富的數(shù)據(jù)類型,包括基本類型和復合類型。 整數(shù)類型:int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64 浮點類型:float32, float64 布爾類型:bool 字符串類型:string 復合類型(非常重要,非常重要,非常重要,因為Golang中沒有太花里胡哨的東西,下面三個復合類型就囊括了99.99%的開發(fā)中使用的數(shù)據(jù)類型) 數(shù)組:固定長度的同類型元素的集合 切片:動態(tài)數(shù)組,可以改變長度 映射(map):鍵值對集合 結(jié)構(gòu)體(struct):自定義類型,將多個字段組合在一起 示例代碼

package main

import "fmt"

func main() {

// 基本類型

var i int = 10

var f float64 = 3.14

var b bool = true

var s string = "Golang"

fmt.Println(i, f, b, s)

// 數(shù)組

var arr [5]int = [5]int{1, 2, 3, 4, 5}

fmt.Println(arr)

// 切片

var slice []int = []int{1, 2, 3}

fmt.Println(slice)

// 映射

var m map[string]int = map[string]int{"one": 1, "two": 2}

fmt.Println(m)

// 結(jié)構(gòu)體

type Person struct {

Name string

Age int

}

var p Person = Person{Name: "Alice", Age: 25}

fmt.Println(p)

}```

數(shù)組 數(shù)組是固定長度的同類型元素的集合。聲明數(shù)組時需要指定長度。

var arr [5]int

arr[0] = 1

fmt.Println(arr)

切片 切片是動態(tài)數(shù)組,可以改變長度。切片比數(shù)組更靈活,使用更頻繁。

slice := []int{1, 2, 3}

slice = append(slice, 4)

fmt.Println(slice)

映射

映射(map)是一種鍵值對集合。鍵和值可以是任意類型。

m := make(map[string]int)

m["one"] = 1

fmt.Println(m)

結(jié)構(gòu)體 結(jié)構(gòu)體(struct)是一種聚合數(shù)據(jù)類型,將多個字段組合在一起。注意一下,struct還可以當作一個類的專屬名稱來使用

type Person struct {

Name string

Age int

}

p := Person{Name: "Bob", Age: 30}

fmt.Println(p)

//除此之外還可以這么用

func (Person *h)insert(int id){

//邏輯放在這里

//上面的參數(shù)就可以當作公有變量在這個類中使用

}

錯誤處理

Golang使用內(nèi)置的error接口來處理錯誤。函數(shù)返回值通常包括結(jié)果和錯誤信息。這里錯誤處理還有一種defer的用法,可以來做一些兜底操作和處理,不過這篇文章主要是讓大家快速上手和熟悉Golang這里就不做講解了,感興趣的大家可以自行搜索。 示例代碼

package main

import (

"errors"

"fmt"

)

func divide(a, b float64) (float64, error) {

if b == 0 {

return 0, errors.New("division by zero")

}

return a / b, nil

}

func main() {

result, err := divide(4, 2)

if err != nil {

fmt.Println("Error:", err)

} else {

fmt.Println("Result:", result)

}

}

開發(fā)常用

基礎(chǔ)知識了解完畢就來聊一下開發(fā)中幾乎必用的一些能力吧。

thrift

Thrift是一個用于跨語言服務(wù)開發(fā)的框架。Golang支持使用Thrift生成客戶端和服務(wù)器代碼。 安裝Thrift 安裝Thrift編譯器: brew install thrift 使用Thrift 定義Thrift接口文件,相當于Java中的swagger,但是這里更為直觀例如service.thrift:

namespace go tutorial

service Calculator {

i32 add(1: i32 num1, 2: i32 num2)

}

生成Golang代碼:

thrift -r --gen go service.thrift

并發(fā)

Golang以其強大的并發(fā)模型而著稱。Golang中的并發(fā)編程基于goroutine和channel。 Goroutine

Goroutine是輕量級的線程,使用go關(guān)鍵字啟動。

go func() {

fmt.Println("Hello from a goroutine")

}()

Channel

Channel用于在goroutine之間傳遞消息和數(shù)據(jù)。

ch := make(chan int)

go func() {

ch <- 42

}()

fmt.Println(<-ch)

然后可以以此堆疊,因為Golang的特性,你堆疊幾十個乃至上百個都不會影響性能,所以在開發(fā)的過程中就要求下游只提供最基礎(chǔ)的查詢,然后全用并發(fā)來拼接,最后在上游完成處理。 數(shù)據(jù)庫 Golang提供了多種數(shù)據(jù)庫驅(qū)動,可以連接和操作不同類型的數(shù)據(jù)庫。常見的數(shù)據(jù)庫驅(qū)動有database/sql和gorm。

連接數(shù)據(jù)庫

使用database/sql連接和操作數(shù)據(jù)庫:

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

)

db, err := sql.Open("mysql", "user:password@/dbname")

if err != nil {

log.Fatal(err)

}

defer db.Close()

查詢數(shù)據(jù) 執(zhí)行SQL查詢:

rows, err := db.Query("SELECT id, name FROM users")

if err != nil {

log.Fatal(err)

}

defer rows.Close()

for rows.Next() {

var id int

var name string

if err := rows.Scan(&id, &name); err != nil {

log.Fatal(err)

}

fmt.Println(id, name)

}

常見問題

在實際的Golang開發(fā)過程中,可能會遇到各種各樣的問題。以下是一些常見問題及其解決方案。

Thrift版本問題

問題描述: 在使用Thrift進行跨語言服務(wù)開發(fā)時,可能會遇到Thrift版本不兼容的問題。這可能會導致生成的代碼無法正常工作。 解決方案: 確保所有使用Thrift的項目使用相同的Thrift編譯器版本。 使用go.mod文件來管理Thrift庫的版本,確保所有依賴的一致性。 如果遇到版本不兼容的問題,可以嘗試升級或降級Thrift編譯器版本,或者手動修改生成的代碼以兼容當前版本。 示例: 在項目的go.mod文件中指定Thrift庫的版本: module your_module_name

go 1.18

require ( github.com/apache/thrift v0.13.0 )

新引入依賴不生效

問題描述: 在項目中引入新的依賴包后,發(fā)現(xiàn)依賴包無法生效,導致編譯錯誤或運行時錯誤。 解決方案: 確保已經(jīng)正確添加新的依賴包,并運行了go mod tidy或go mod vendor命令來更新依賴。 檢查項目的go.mod文件,確保新引入的依賴包已經(jīng)被正確添加。 如果使用了IDE,嘗試重啟IDE以刷新依賴緩存。 確保沒有使用舊版本的依賴包,可以嘗試刪除go.sum文件并重新運行g(shù)o mod tidy。 示例: 在項目中引入新的依賴包并更新依賴:

go get github.com/gin-gonic/gin

go mod tidy(這個命令有事沒事就可以敲一下,能解決7成左右的問題)

總結(jié) 本文介紹了Golang的基礎(chǔ)知識,涵蓋了從數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)、錯誤處理到并發(fā)編程和數(shù)據(jù)庫操作的各個方面。通過閱讀本文,讀者應當能夠掌握Golang的基本概念和編程技巧,并能夠上手進行實際的開發(fā)。

package main

import (

"database/sql"

"errors"

"fmt"

"log"

"os"

_ "github.com/go-sql-driver/mysql"

)

func main() {

// 基本數(shù)據(jù)類型

var i int = 10

var f float64 = 3.14

var b bool = true

var s string = "Golang"

fmt.Println(i, f, b, s)

// 數(shù)組

var arr [5]int = [5]int{1, 2, 3, 4, 5}

fmt.Println(arr)

// 切片

var slice []int = []int{1, 2, 3}

slice = append(slice, 4)

fmt.Println(slice)

// 映射

var m map[string]int = map[string]int{"one": 1, "two": 2}

fmt.Println(m)

// 結(jié)構(gòu)體

type Person struct {

Name string

Age int

}

var p Person = Person{Name: "Alice", Age: 25}

fmt.Println(p)

// 錯誤處理

result, err := divide(4, 2)

if err != nil {

fmt.Println("Error:", err)

} else {

fmt.Println("Result:", result)

}

// 日志

log.Println("This is a log message")

// 配置管理

dbHost := os.Getenv("DB_HOST")

fmt.Println("DB Host:", dbHost)

// 并發(fā)

ch := make(chan int)

go func() {

ch <- 42

}()

fmt.Println(<-ch)

// 數(shù)據(jù)庫連接

db, err := sql.Open("mysql", "user:password@/dbname")

if err != nil {

log.Fatal(err)

}

defer db.Close()

// 數(shù)據(jù)庫查詢

rows, err := db.Query("SELECT id, name FROM users")

if err != nil {

log.Fatal(err)

}

defer rows.Close()

for rows.Next() {

var id int

var name string

if err := rows.Scan(&id, &name); err != nil {

log.Fatal(err)

}

fmt.Println(id, name)

}

}

// divide 函數(shù)用于演示錯誤處理

func divide(a, b float64) (float64, error) {

if b == 0 {

return 0, errors.New("division by zero")

}

return a / b, nil

}

柚子快報邀請碼778899分享:開發(fā)語言 Golang快速上手

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19476549.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄