
sudo apt update
sudo apt install golang-go
这将安装Go语言的官方包。安装完成后,验证安装是否成功:
go version
预期的输出将是类似“go version go1.20.1 linux/amd64”的信息。
接下来,我们学习Go语言的基础语法。首先创建一个名为`hello.go`的文件,并写入以下代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
这段代码定义了一个名为`main`的包,并包含一个`main`函数,这是Go程序的入口点。`fmt.Println`用于输出文本到控制台。
接下来,我们编译并运行这个程序:
go run hello.go
你应该会看到输出“Hello, World!”。
Go语言的一个重要特性是并发编程。我们可以使用`goroutine`来实现并发。以下是一个简单的例子:
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(1 time.Second)
}
}
func main() {
go printNumbers()
go printNumbers()
time.Sleep(7 time.Second)
}
这段代码启动了两个`goroutine`,它们并发打印数字1到5,每个数字之间间隔1秒。
在Web开发方面,Go语言提供了强大的支持。我们可以使用`net/http`包来创建一个简单的HTTP服务器:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r http.Request) {
fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
这段代码启动了一个监听8080端口的HTTP服务器,并对所有请求返回一个问候语。
对于更复杂的Web应用,我们可以使用`Gin`或`Echo`等框架。以`Gin`为例,首先安装它:
go get -u github.com/gin-gonic/gin
然后创建一个简单的路由:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
这段代码创建了一个简单的API,当访问`/ping`路由时,会返回JSON响应`{"message":"pong"}`。
在微服务架构方面,Go语言凭借其高性能和并发能力成为理想选择。我们可以使用`Go kit`或`Micro`等框架来构建微服务。以下是一个使用`Go kit`的简单示例:
package main
import (
"context"
"log"
"net/http"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/ratelimit"
"github.com/go-kit/kit/sender/httpjson"
)
type endpointSet struct {
PingEndpoint endpoint.Endpoint
}
func makePingEndpoint(svc Service) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
return svc.Ping(ctx), nil
}
}
func main() {
e := endpointSet{
PingEndpoint: makePingEndpoint(Service),
}
server := http.NewServeMux()
server.Handle("/ping", httpjson.NewJSONHandler(e.PingEndpoint))
log.Println("Starting server on :8080")
http.ListenAndServe(":8080", server)
}
这段代码创建了一个简单的微服务,它提供了一个`/ping`路由。
最后,我们来看一个Go语言项目实战案例:构建一个简单的博客系统。这个系统将包括用户认证、文章发布和评论功能。以下是用户认证模块的代码:
package auth
import (
"golang.org/x/crypto/bcrypt"
)
func HashPassword(password string) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
if err != nil {
return "", err
}
return string(bytes), nil
}
func CheckPasswordHash(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
`HashPassword`函数用于生成密码哈希,`CheckPasswordHash`函数用于验证密码。
文章发布模块的代码如下:
package article
type Article struct {
ID int
Title string
Content string
AuthorID int
CreatedAt time.Time
}
func CreateArticle(title, content string, authorID int) (Article, error) {
// 这里省略数据库操作代码
return &Article{
Title: title,
Content: content,
AuthorID: authorID,
CreatedAt: time.Now(),
}, nil
}
`CreateArticle`函数用于创建新文章。
评论功能模块的代码如下:
package comment
type Comment struct {
ID int
Content string
ArticleID int
AuthorID int
CreatedAt time.Time
}
func CreateComment(content string, articleID, authorID int) (Comment, error) {
// 这里省略数据库操作代码
return &Comment{
Content: content,
ArticleID: articleID,
AuthorID: authorID,
CreatedAt: time.Now(),
}, nil
}
`CreateComment`函数用于创建新评论。