Golang进阶:提升输入处理能力的技巧与实践

Golang进阶:提升输入处理能力的技巧与实践 大家好,我知道自己在谷歌搜索时可能没有问对问题,所以需要一些人工帮助。我正在尝试创建一个结构体,然后从主函数中为结构体中的变量赋值。我会提出一个问题,然后将回答分配给结构体中相应的变量。这叫什么操作?看起来像是切片,但我在浏览时找不到完全符合的内容。

这里是我尝试实现的代码示例

func main() {
    fmt.Println("hello world")
}
11 回复

哦,谢谢

更多关于Golang进阶:提升输入处理能力的技巧与实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


它没有将字符串赋值给结构体中的变量。至少第二个没有赋值。

效果非常好!那么你是需要将结构体设置为实例吗?Ins 具体是做什么用的呢?

我不太理解"对第一个有效但对第二个无效"的意思,第二个指的是什么?你是指循环之类的吗?

这很奇怪。代码非常简单,应该在不同版本或操作系统上正常工作。您能提供任何错误信息或日志(您的终端输入/输出)吗?

在你的代码中,cat 是一个结构体而不是实际实例,修改你的代码为 https://play.golang.org/p/2CmZYJRwOgG,希望对你有帮助。

我的程序无法正常运行。嗯,我使用的是VSCode编辑器并在终端中运行。它能接收第一个输入,但会跳过第二个输入。不知道是什么原因?很高兴你的程序能正常运行,真希望我的也能正常工作。

所以问题是它不会多次赋值字符串。我完全按照你们教我的方法做了,第一次成功了但第二次却不行。想知道为什么?这里是playground链接,它会展示我的意思。我本想让它保存值并在最后打印出来。

你的

type cat struct{
	color string
	name string
}

是一个类型定义,它只告诉编译器 cat 结构体包含哪些字段。它本身并不是一个 cat 对象。在 manxiaqu 的代码中,catIns 只是被选作你定义的 cat 类型实例的变量名称。因此变量名中的 Ins 部分仅代表实例(Instance),但你其实可以将变量命名为几乎任何名称。

我在本地运行了你的代码,结果如下:

123123

我看到输入参数 ‘a’ 和 ‘b’ 已经被赋值给结构体中的 c 字段。如果你的预期结果不同,请问你期望得到什么结果?

它没有将字符串赋值给结构体中的变量,至少第二个没有赋值。

引用块

在Go语言中,您描述的操作通常称为结构体字段赋值结构体初始化。您可以通过多种方式为结构体变量赋值,包括使用字面量初始化、点操作符直接赋值,或者通过函数参数传递值。

以下是一个完整的示例,展示如何定义结构体、创建实例并为其字段赋值:

package main

import "fmt"

// 定义结构体类型
type Question struct {
    ID      int
    Content string
    Answer  string
}

func main() {
    // 方法1:使用字面量初始化
    q1 := Question{
        ID:      1,
        Content: "什么是Go语言?",
        Answer:  "Go是一种开源编程语言",
    }
    fmt.Printf("q1: %+v\n", q1)

    // 方法2:先声明后赋值
    var q2 Question
    q2.ID = 2
    q2.Content = "Go有哪些特性?"
    q2.Answer = "并发、垃圾回收、快速编译"
    fmt.Printf("q2: %+v\n", q2)

    // 方法3:使用new创建指针并赋值
    q3 := new(Question)
    q3.ID = 3
    q3.Content = "如何学习Go?"
    q3.Answer = "通过官方文档和实践项目"
    fmt.Printf("q3: %+v\n", *q3)

    // 方法4:通过函数赋值
    q4 := createQuestion(4, "Go适合什么场景?", "网络服务、系统工具")
    fmt.Printf("q4: %+v\n", q4)
}

// 辅助函数,返回Question实例
func createQuestion(id int, content, answer string) Question {
    return Question{
        ID:      id,
        Content: content,
        Answer:  answer,
    }
}

运行输出:

q1: {ID:1 Content:什么是Go语言? Answer:Go是一种开源编程语言}
q2: {ID:2 Content:Go有哪些特性? Answer:并发、垃圾回收、快速编译}
q3: {ID:3 Content:如何学习Go? Answer:通过官方文档和实践项目}
q4: {ID:4 Content:Go适合什么场景? Answer:网络服务、系统工具}

如果您需要从用户输入动态赋值,可以使用fmt.Scan系列函数:

package main

import "fmt"

type UserInput struct {
    Name    string
    Age     int
    Message string
}

func main() {
    var input UserInput
    
    fmt.Print("请输入姓名: ")
    fmt.Scanln(&input.Name)
    
    fmt.Print("请输入年龄: ")
    fmt.Scanln(&input.Age)
    
    fmt.Print("请输入消息: ")
    fmt.Scanln(&input.Message)
    
    fmt.Printf("用户输入: %+v\n", input)
}

这些方法涵盖了Go语言中结构体赋值的常见模式,您可以根据具体需求选择合适的方式。

回到顶部