首頁 > 後端開發 > Golang > 主體

Golang 新手疑問集錦:解決常見困擾,邁向精進

王林
發布: 2024-05-06 21:51:01
原創
639 人瀏覽過

針對Golang 新手的常見問題,本文提供了明確解決方案:定義並初始化結構體:type Person struct { Name string; Age int }; Person p = {"John Doe", 30}使用映射:m : = make(map[string]int); m["Alice"] = 10處理可變數量參數:func sumAll(...int) int讀寫檔:檔案開啟、寫入、讀取建立和使用Goroutine: go concurrentFunc(i)

Golang 新手疑问集锦:解决常见困扰,迈向精进

Golang 新手疑問集錦:解決常見困擾,邁向精進

作為Golang 的新手,很容易遇到各種問題。本文將透過提供清晰易懂的解決方案來解決一些最常見的困擾,幫助新手邁向精進。

1. 如何定義和初始化結構體?

type Person struct {
  Name string
  Age  int
}

p := Person{"John Doe", 30}
登入後複製

2. 如何使用映射(Map)?

m := make(map[string]int)
m["Alice"] = 10
m["Bob"] = 20

fmt.Println(m["Alice"]) // 输出: 10
登入後複製

3. 如何接收可變數量的參數?

func sumAll(numbers ...int) int {
  total := 0
  for _, num := range numbers {
    total += num
  }
  return total
}

result := sumAll(1, 2, 3, 4, 5) // result = 15
登入後複製

4. 如何讀寫檔案?

f, err := os.Open("test.txt")
if err != nil {
  panic(err)
}
defer f.Close()

_, err = f.Write([]byte("Hello, world!"))
if err != nil {
  panic(err)
}

b := make([]byte, 10)
_, err = f.Read(b)
if err != nil {
  panic(err)
}
fmt.Println(string(b)) // 输出: "Hello, wo"
登入後複製

5. 如何建立和使用 Goroutine?

func concurrentFunc(i int) {
  fmt.Println(i)
}

for i := 0; i < 5; i++ {
  go concurrentFunc(i)
}
// 同时输出 0、1、2、3、4
登入後複製

實戰案例

假設我們要建立一個簡單的 RESTful API,允許使用者管理任務。

1. 定義任務結構體:

type Task struct {
  ID   int
  Name string
  Desc string
}
登入後複製

#2. 建立任務集合:

tasks := make([]Task, 0)
登入後複製

##3.處理建立任務請求:

func createTask(w http.ResponseWriter, r *http.Request) {
  var task Task
  if err := json.NewDecoder(r.Body).Decode(&task); err != nil {
    http.Error(w, "Invalid JSON", http.StatusBadRequest)
    return
  }

  tasks = append(tasks, task)
  fmt.Fprint(w, "Task created successfully")
}
登入後複製

4. 處理取得任務請求:

func getTasks(w http.ResponseWriter, r *http.Request) {
  enc := json.NewEncoder(w)
  if err := enc.Encode(tasks); err != nil {
    http.Error(w, "Failed to encode tasks", http.StatusInternalServerError)
    return
  }
}
登入後複製

5. 啟動HTTP 伺服器:

############################################################
func main() {
  http.HandleFunc("/tasks", createTask)
  http.HandleFunc("/tasks", getTasks)

  fmt.Println("Server listening on port 8080")
  if err := http.ListenAndServe(":8080", nil); err != nil {
    panic(err)
  }
}
登入後複製

以上是Golang 新手疑問集錦:解決常見困擾,邁向精進的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!