当前位置:   article > 正文

go interface stuct结构练习报错,结构体定义与main函数位置,结构体变量后加逗号“,”

go interface stuct结构练习报错,结构体定义与main函数位置,结构体变量后加逗号“,”
  1. import "fmt"
  2. func main() {
  3. //var x interface{} =func(x int)string{
  4. // return fmt.Sprintf("d:%d",x)
  5. //}
  6. //
  7. //switch v:=x.(type) { // 局部变量v是类型转换后的结果
  8. //case nil:
  9. // println("nil")
  10. //case*int:
  11. // println(*v)
  12. //case func(int)string:
  13. // println(v(100))
  14. //case fmt.Stringer:
  15. // fmt.Println(v)
  16. //default:
  17. // println("unknown")
  18. //}
  19. var x interface{} = func(x int) string {
  20. return fmt.Sprintf("d:%d", x)
  21. }
  22. switch v := x.(type) {
  23. case nil:
  24. println("nil")
  25. case *int:
  26. print(*v)
  27. case func(int) string:
  28. println(v(100))
  29. case fmt.Stringer:
  30. fmt.Println(v)
  31. default:
  32. print("unkown")
  33. }
  34. type MyIntergace interface{
  35. MyWriterFunc()
  36. MyReaderFunc()
  37. }
  38. type MyStrs struct{
  39. name string
  40. age int
  41. }
  42. func (in *MyStrs) MyWriterFunc(){
  43. fmt.Printf("MyWriterFunc")
  44. }
  45. func (in *MyStrs) MyReaderFunc(){
  46. fmt.Printf("MyReaderFunc")
  47. }
  48. var myvar MyIntergace=&MyStrs{
  49. name:"ssds",
  50. age:13
  51. }
  52. myvar.MyWriterFunc()
  53. myvar.MyReaderFunc()
  54. }

报错:

.\test_interface.go:49:34: syntax error: unexpected { at end of statement

.\test_interface.go:57:9: syntax error: unexpected newline in composite literal; possibly missing comma or }

.\test_interface.go:59:2: syntax error: non-declaration statement outside function body

错误点1: 需要将结构体定义部分移除main外

因为Go 语言要求所有类型、函数和方法的声明都必须在它们被使用之前进行。换句话说,你不能在 main 函数中引用一个还没有被声明的类型或函数。

因此,你需要将所有的类型声明(比如 MyInterface 和 MyStrs)、方法声明以及变量声明都放在 main 函数之前。这样,当 main 函数开始执行时,所有的依赖项都已经准备好了。

(虽然将interface定义防在main中也跑的通,但是最好还是将其放在main外,保持代码风格一致)

错误点2,结构体的每个字段及其值后面都需要加“,”,主要是为了划分字段的界限,指明字段名的开始

  1. var myvar MyInterface = &MyStrs{
  2. name: "ssds",
  3. age: 13,
  4. }

因此 纠正后的代码是:

  1. package main
  2. import "fmt"
  3. type MyStrs struct {
  4. name string
  5. age int
  6. }
  7. type Myinterface interface {
  8. MyWriterFunc()
  9. MyReaderFunc()
  10. }
  11. func (in *MyStrs) MyWriterFunc() {
  12. fmt.Printf("MyWriterFunc")
  13. }
  14. func (in *MyStrs) MyReaderFunc() {
  15. fmt.Printf("MyReaderFunc")
  16. }
  17. func main() {
  18. //var x interface{} =func(x int)string{
  19. // return fmt.Sprintf("d:%d",x)
  20. //}
  21. //
  22. //switch v:=x.(type) { // 局部变量v是类型转换后的结果
  23. //case nil:
  24. // println("nil")
  25. //case*int:
  26. // println(*v)
  27. //case func(int)string:
  28. // println(v(100))
  29. //case fmt.Stringer:
  30. // fmt.Println(v)
  31. //default:
  32. // println("unknown")
  33. //}
  34. var x interface{} = func(x int) string {
  35. return fmt.Sprintf("d:%d", x)
  36. }
  37. switch v := x.(type) {
  38. case nil:
  39. println("nil")
  40. case *int:
  41. print(*v)
  42. case func(int) string:
  43. println(v(100))
  44. case fmt.Stringer:
  45. fmt.Println(v)
  46. default:
  47. print("unkown")
  48. }
  49. var myvar Myinterface = &MyStrs{
  50. name: "ssds",
  51. age: 13,
  52. }
  53. myvar.MyWriterFunc()
  54. myvar.MyReaderFunc()
  55. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/487759
推荐阅读
相关标签
  

闽ICP备14008679号