Home >Backend Development >Golang >Collection of Golang novice questions: Solve common problems and move towards improvement

Collection of Golang novice questions: Solve common problems and move towards improvement

王林
王林Original
2024-05-06 21:51:01771browse

In response to common problems faced by Golang novices, this article provides a clear solution: define and initialize the structure: type Person struct { Name string; Age int }; Person p = {"John Doe", 30} using mapping: m: = make(map[string]int); m["Alice"] = 10 Processing a variable number of parameters: func sumAll(...int) int Reading and writing files: File opening, writing, reading Creating and using Goroutine: go concurrentFunc(i)

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

Golang novice question collection: solve common problems and move towards improvement

As a novice in Golang, it is very difficult to It is easy to encounter various problems. This article will help newbies get better at it by providing clear and easy-to-understand solutions to some of the most common frustrations.

1. How to define and initialize a structure?

type Person struct {
  Name string
  Age  int
}

p := Person{"John Doe", 30}

2. How to use mapping (Map)?

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

fmt.Println(m["Alice"]) // 输出: 10

3. How to receive a variable number of parameters?

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. How to read and write files?

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. How to create and use Goroutine?

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

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

Practical Case

Suppose we want to create a simple RESTful API that allows users to manage tasks.

1. Define the task structure:

type Task struct {
  ID   int
  Name string
  Desc string
}

2. Create a task collection:

tasks := make([]Task, 0)

3. Process creation task request:

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. Process acquisition task request:

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. Start HTTP server:

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)
  }
}

The above is the detailed content of Collection of Golang novice questions: Solve common problems and move towards improvement. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn