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

王林
Release: 2024-05-06 21:51:01
Original
748 people have browsed it

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}
Copy after login

2. How to use mapping (Map)?

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

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

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
Copy after login

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"
Copy after login

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
Copy after login

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
}
Copy after login

2. Create a task collection:

tasks := make([]Task, 0)
Copy after login

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")
}
Copy after login

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
  }
}
Copy after login

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)
  }
}
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template