Go语言指针使用问题---BUG
学习Go语言中的键盘输入语法,欲手敲以下代码,发现有大量重复的语句,于是想将重复的语句复用,写成一个函数
第一次改写内容如下:
存在的问题是:输出结果无法将返回值带回来
package main
import "fmt"
// 定义一个函数,输入信息的函数
func mesgInput(argName []string, data [7]string) {
for i:=0; i < len(argName); i++{
fmt.Println("请输入", argName[i])
fmt.Scanln(&data[i])
}
}
func main() {
var infoTitle = []string {"姓名", "年龄", "薪水", "是否通过考试"}
var data [7]string
mesgInput(infoTitle,data)
fmt.Println(data)
}
第二次修改代码:
想到函数中如果想将值带回来,需要在参数列表中使用指针类型,修改如下,但带来的问题是在main函数中的调用中会出现爆红
package main
import "fmt"
// 定义一个函数,输入信息的函数
func mesgInput(argName []string, data [7]*string) {
for i:=0; i < len(argName); i++{
fmt.Println("请输入", argName[i])
fmt.Scanln(&data[i])
}
}
func main() {
var infoTitle = []string {"姓名", "年龄", "薪水", "是否通过考试"}
var data [7]string
mesgInput(infoTitle,&data) //会报错
fmt.Println(data)
}
第三次修改代码
注意到 data *[7]string 和data [7]*string 的区别
data [7]*string 意思是数组还是值类型,只是将数组中存储的string修改为指针类型,数组仍然是值类型
data *[7]string 意思是将数组是为指针类型
修改后成功将值带会
package main
import "fmt"
// 定义一个函数,输入信息的函数
func mesgInput(argName []string, data *[7]string) {
for i:=0; i < len(argName); i++{
fmt.Println("请输入", argName[i])
fmt.Scanln(&data[i])
}
}
func main() {
var infoTitle = []string {"姓名", "年龄", "薪水", "是否通过考试"}
var data [7]string
mesgInput(infoTitle,&data)
fmt.Println(data)
}