引言
Golang,也被称为Go语言,是由Google开发的一种静态强类型、编译型、并发型编程语言。自从2009年推出以来,Golang因其简洁的语法、高效的并发处理能力和跨平台编译特性,受到了广泛的关注和喜爱。本文将分享50个实战案例,帮助初学者轻松上手Golang编程。
案例一:Golang基础语法
1. 变量和常量的声明
var a int = 10
const b = 20
2. 控制结构
if a > b {
fmt.Println("a 大于 b")
} else {
fmt.Println("a 不大于 b")
}
for i := 0; i < 10; i++ {
fmt.Println(i)
}
switch a {
case 1:
fmt.Println("a 是 1")
case 2:
fmt.Println("a 是 2")
default:
fmt.Println("a 不是 1 或 2")
}
案例二:函数和接口
3. 函数定义
func add(a, b int) int {
return a + b
}
func main() {
result := add(10, 20)
fmt.Println(result)
}
4. 接口
type Animal interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "汪汪"
}
func main() {
dog := Dog{}
fmt.Println(dog.Speak())
}
案例三:并发编程
5. goroutine
func worker(id int) {
for {
fmt.Printf("Worker %d is working\n", id)
time.Sleep(time.Second)
}
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go worker(i)
}
wg.Wait()
}
6. channel
func producer(ch chan int) {
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
}
func consumer(ch chan int) {
for v := range ch {
fmt.Println(v)
}
}
func main() {
ch := make(chan int)
go producer(ch)
go consumer(ch)
}
案例四:网络编程
7. HTTP服务器
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
func main() {
http.ListenAndServe(":8080", nil)
}
8. HTTP客户端
req, err := http.NewRequest("GET", "http://example.com", nil)
if err != nil {
panic(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
案例五:数据库操作
9. 使用GORM操作MySQL
db, err := gorm.Open(mysql.Open("user:password@/dbname"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 创建表
db.AutoMigrate(&User{})
// 插入数据
user := User{Name: "John", Age: 30}
db.Create(&user)
// 查询数据
var user User
db.First(&user)
// 更新数据
db.Model(&user).Update("Name", "John Doe")
// 删除数据
db.Delete(&user)
案例六:其他实战技巧
10. 使用第三方库
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)
func main() {
router := gin.Default()
router.GET("/validate", func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
validate := validator.New()
if err := validate.Struct(user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "Validation succeeded"})
})
router.Run(":8080")
}
11. 使用代码生成器
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
)
func main() {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"name": "John",
"age": 30,
})
tokenString, err := token.SignedString([]byte("mySecret"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(tokenString)
}
总结
通过以上50个实战案例,相信你已经对Golang有了更深入的了解。在实际编程过程中,不断积累经验,多写代码,才能更好地掌握这门语言。祝你在Golang的道路上越走越远!
