萧潇墨 2020-10-15 16:25 采纳率: 66.7%
浏览 42

对于golang的gin框架有些地方不是很了解?

最近在学习golang的gin框架写一个demo,有几点疑问,但是找不到答案,
1.gin内部是否实现了goroutine异步并发
2.gin多个端口启动服务对性能上有好处吗
3.golang的结构体中有一个init的初始化方法,除了init是否还有其它方法

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 04:00
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    1. 是的,Gin框架使用了Go语言的goroutines(协程)来实现异步并发。这使得程序能够并行执行多个任务。
    package main
    
    import (
    	"fmt"
    	"net/http"
    
    	"github.com/gin-gonic/gin"
    )
    
    func init() {
    	fmt.Println("Init called")
    }
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/", func(c *gin.Context) {
    		c.String(http.StatusOK, "Hello, World!")
    	})
    
    	r.Run(":8080")
    }
    
    1. 对于多个端口启动服务来说,通常情况下并不会带来明显的性能提升。这是因为大多数现代的操作系统都会自动为每个进程分配一个独立的套接字,因此即使在同一台机器上同时运行多个goroutines,也不会导致性能瓶颈。然而,在非常大的网络环境中,确实可能会出现性能问题,例如网络拥塞或CPU资源不足。

    2. 在Golang中,所有类型的字段都有一个默认的构造函数,即New()函数。此外,还有一些特殊类型,比如字符串、整数和日期时间等,它们还提供了一个特殊的构造函数NewString, NewInt, 和NewDateTime

    type Person struct{}
    
    // NewPerson creates a new Person instance.
    func NewPerson() *Person {
    	return &Person{}
    }
    
    // String returns the string representation of this person's name.
    func (p *Person) String() string {
    	return p.Name
    }
    
    // Init is a special method for initializing an object in Golang.
    func (p *Person) Init(name string) {
    	p.Name = name
    }
    

    以上就是关于Gin框架的一些基础知识,如果你有任何其他问题,请随时提问。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵