golang
已收录文章:40篇
-
Go语言中唯一的循环结构是for,它通过灵活的语法替代while和do-while。基本形式包含初始化、条件判断和迭代语句:fori:=0;i<10;i++{...},可省略任一部分以实现不同控制逻辑。387 收藏
-
在Go语言中,值类型参数传递是按值进行的,函数接收的是变量副本,因此无法直接修改原值;要修改原始值必须使用指针。例如,modifyValue(xint)中对x的修改不影响原变量a,而modifyValuePtr(x*int)通过传入&a并解引用*x=100可成功修改原值。结构体作为值类型同样适用此规则,如updatePerson(p*Person)可修改person的字段。一般原则是:需修改原数据、结构体较大或需避免复制开销时使用指针,仅读取小数据时可传值。掌握传值与传指针的区别是编写正确Go函数385 收藏
-
Golang通过reflect包实现结构体字段动态赋值,核心在于使用reflect.ValueOf获取值的反射表示,并通过Elem()、FieldByName()和Set()等方法操作可导出字段,需传入结构体指针以确保可设置性。示例中定义了SetField函数,对User结构体的Name和Age字段进行动态赋值,同时处理字段不存在、类型不匹配及不可导出等情况。reflect允许运行时检查和修改类型信息,适用于JSON解析、ORM映射等不确定数据结构场景,但存在性能开销与安全风险。为保障安全性,需验证字段有379 收藏
-
函数返回非nilerror时主值应视为无效,正确做法是失败时返回nil主值和错误,成功时返回值和nil错误,如os.Open等标准库函数所示,确保调用方能安全依赖err判断结果有效性。370 收藏
-
Go语言通过流式处理实现大文件上传,避免内存溢出。首先前端设置enctype="multipart/form-data",后端调用r.ParseMultipartForm(maxMemory)解析请求,maxMemory仅控制表单字段内存使用,文件部分自动写入临时文件。获取文件句柄后,使用file.Open()得到multipart.File(实现io.Reader接口),再通过io.Copy或分块读取(如32KB缓冲区循环read/write)将数据写入目标文件。关键在于避免一次性加载整个文件,采用固定366 收藏
-
在Go语言中,为struct添加方法需通过接收者参数绑定,支持值接收者和指针接收者,前者操作副本不修改原值,后者可修改原字段且避免复制开销;方法必须定义在同包的命名类型上,不能为其他包或基础类型直接添加方法,但可通过type定义别名扩展;例如Point结构体可绑定Distance和Translate方法,分别计算距离和修改坐标,调用时Go自动处理指针与值的转换,实现灵活封装。357 收藏