萧潇墨 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 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路