以下是一个简易的聊天应用的Go语言编程实例。这个程序将使用一个`map`来存储用户的消息,并使用一个`channel`来接收和发送消息。
```go
package main
import (
"fmt"
"net/http"
"os"
)
type User struct {
Name string
}
func NewUser(name string) *User {
return &User{Name: name}
}
func (u *User) SendMessage(message string) {
u.messages = append(u.messages, message)
}
func (u *User) GetMessages() []string {
return u.messages
}
func (u *User) Name() string {
return u.Name
}
func (u *User) Message(msg string) {
u.SendMessage(msg)
}
func (u *User) ReceiveMessage() {
for msg := range u.messages {
fmt.Println("Received: ", msg)
}
}
func (u *User) BroadcastMessage(msg string) {
for _, user := range users {
user.Message(msg)
}
}
var users = []*User{
NewUser("Alice"),
NewUser("Bob"),
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
body, _ := ioutil.ReadAll(r.Body)
newUser := NewUser(strings.TrimSpace(string(body)))
users = append(users, newUser)
fmt.Fprintf(w, "New user added: %sn", newUser.Name)
} else if r.Method == "GET" {
fmt.Fprintf(w, "Users: %sn", strings.Join(users, "n"))
} else {
fmt.Fprintf(w, "Invalid request")
}
})
http.ListenAndServe(":8080", nil)
}
```
在这个程序中,我们首先定义了一个`User`结构体,用于存储用户的名字。然后,我们创建了一个`map`来存储所有的用户,以及一些方法来添加、获取和广播消息。最后,我们在`main`函数中设置了HTTP服务器,监听在`localhost:8080`上。当有新的用户添加时,服务器会打印出一条消息;当有用户发送消息时,服务器会打印出收到的消息。