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

import "fmt"func main() {//var x interface{} =func(x int)string{//	return fmt.Sprintf("d:%d",x)//}////switch v:=x.(type) {            // 局部变量v是类型转换后的结果//case nil://	println("nil")//case*int://	println(*v)//case func(int)string://	println(v(100))//case fmt.Stringer://	fmt.Println(v)//default://	println("unknown")//}var x interface{} = func(x int) string {return fmt.Sprintf("d:%d", x)}switch v := x.(type) {case nil:println("nil")case *int:print(*v)case func(int) string:println(v(100))case fmt.Stringer:fmt.Println(v)default:print("unkown")}type MyIntergace interface{MyWriterFunc()MyReaderFunc()}type MyStrs struct{name stringage int}func (in *MyStrs) MyWriterFunc(){fmt.Printf("MyWriterFunc")}func (in *MyStrs) MyReaderFunc(){fmt.Printf("MyReaderFunc")}var myvar MyIntergace=&MyStrs{name:"ssds",age:13}myvar.MyWriterFunc()myvar.MyReaderFunc()}

报错:

.\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,结构体的每个字段及其值后面都需要加“,”,主要是为了划分字段的界限,指明字段名的开始

var myvar MyInterface = &MyStrs{  name: "ssds",  age:  13,  
}

因此 纠正后的代码是:

package mainimport "fmt"type MyStrs struct {name stringage  int
}
type Myinterface interface {MyWriterFunc()MyReaderFunc()
}func (in *MyStrs) MyWriterFunc() {fmt.Printf("MyWriterFunc")
}
func (in *MyStrs) MyReaderFunc() {fmt.Printf("MyReaderFunc")
}
func main() {//var x interface{} =func(x int)string{//	return fmt.Sprintf("d:%d",x)//}////switch v:=x.(type) {            // 局部变量v是类型转换后的结果//case nil://	println("nil")//case*int://	println(*v)//case func(int)string://	println(v(100))//case fmt.Stringer://	fmt.Println(v)//default://	println("unknown")//}var x interface{} = func(x int) string {return fmt.Sprintf("d:%d", x)}switch v := x.(type) {case nil:println("nil")case *int:print(*v)case func(int) string:println(v(100))case fmt.Stringer:fmt.Println(v)default:print("unkown")}var myvar Myinterface = &MyStrs{name: "ssds",age:  13,}myvar.MyWriterFunc()myvar.MyReaderFunc()}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins 的构建时执行时间问题

我们希望我的项目能够在特定的时间自动执行,我们需要设定一个定时任务。 Jenkins 的定时任务是通过 Cron 任务来实现的,但是由有点不一样。 H/2 * * * * 比如说上面的设置就是每 2 分钟执行一次。 希望每分钟执行一次 Jenkins 的每分钟执行一次的设置…

【AI工具之Prezo如何自动生成PPT操作步骤】

先说优缺点: 最大的优点就是免费(但说实话功能和体验方面很弱)支持中文提问(最好用英文),智能生成图文(但是只能生成英文内容)可以AI生成图片,图片很精美酷炫&#xff0…

Eureka基础介绍和使用

目录 一.理论基础 二.父项目 2.1 新建父项目 2.2 管理依赖 三.子项目 3.1 新建子项目 3.2 注册中心Server依赖和启动类和配置文件 3.3 生产者Client 依赖和启动类和配置文件 3.5 消费者Custmer依赖和配置类、启动类和配置文件 四.心跳 五.公共资源项目 5.1新建实体…

【数据库】MySQL分页查询

分页查询: 数据记录条数过多的时候,需要分页来显示。 语法: select 查询字段 from 表名 where ....等等 limit offset(开始记录索引,是从0开始的),size(要取出的条数); 案例&…

空心电抗器的matlab建模与性能仿真分析

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 空心电抗器是一种无铁芯的电感元件,主要由一圈或多圈导线绕制在非磁性材料制成的空心圆筒或其他形状的骨架上构成。其工作原理基于法拉第电磁感应定律,…

【计算机组成原理】加法器原理及其优化

苏泽 本专栏纯个人笔记作用 用于记录408 学习的笔记记录(敲了两年码实在不习惯手写笔记了) 如果能帮助到大家当然最好 但由于是工作后退下来备考 很多说法和想法都会结合实际开发的思想 可能不是那么的纯粹应试哈 希望大家挑选自己喜欢的口味食用…

现代商业中首席人工智能官(CAIO)的角色与影响

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

备战面试K8S

备战面试&&K8S Kubernetes关于DockerDocker的优缺点分析 WebAssemblyWebAssembly与Container比较 CtrCrictlCtr和CriCtl的区别 Pod生命周期PodConditions容器状态Pod容器组成生命周期的流程 Kubelet EFK日志采集工具的优缺点 Kubernetes 容器运行接口 Container Runti…

CTFHub(web SQL注入)

CTFHub技能树 Web-SQL注入 详解_666c6167-CSDN博客 Ctfhub - web -- SQL注入_ctfhub sql注入-CSDN博客 整数型注入 方法一 根据提示输入1, 闭合方式就是 1 ,整数型 存在两列,这里已经给出了字段,不需要再order by了 爆出数据库…

PotCSS

PotCSS 是一个基于 CSS 的编程风格,它鼓励使用更模块化和可重用的方法来编写 CSS 代码。PotCSS 的核心理念是将 CSS 代码组织成单独的、独立的“pot”(即“罐子”或“容器”),每个 pot 包含一组相关的样式,这些样式可以…

【gradle】idea创建的gradle项目每个mudule有多余的iml文件

idea创建的gradle项目每个mudule有多余的iml文件 比如: module_name.iml module_name.main.iml module_name.test.iml 文件&#xff0c;而且每个module都有。 只需要在项目根目录的.idea文件夹下的gradle.xml文件添加<option name"resolveModulePerSourceSet" va…

yolov7模型输出层预测方法解读

本文从代码的角度分析模型训练阶段输出层的预测包括以下几个方面&#xff1a; 标注数据&#xff08;下文统称targets&#xff09;的正样本分配策略&#xff0c;代码实现位于find_3_positive。候选框的生成&#xff0c;会介绍输出层的预测值、GT、grid、 anchor之间的联系损失函…

算法练习第20天|回溯算法 77.组合问题 257. 二叉树的所有路径

1.什么是回溯算法&#xff1f; 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。其本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案。 2.为什么要有回溯算法? 那么既然回溯法并不高效为什么还要用它呢&#xff1f; 因为有的问题能暴力…

Hive进阶(2)----HDFS写入数据流程(赋图助君理解)

HDFS写入数据流程 一、写入流程 1、 Client向NameNode发起RPC请求&#xff0c;来确定请求文件block所在的位置&#xff1b; 2、 NameNode会视情况返回文件的部分或者全部block列表&#xff0c;对于每个block&#xff0c;NameNode都会返回含有该block副本的DataNode地址&…

Ubuntu22.04.4 - 网络配置 - 笔记

一、设置固定ip 1、cd /etc/netplan 查看文件夹下的配置文件 我这里叫 00-installer-config.yaml 2、sudo nano /etc/netplan/00-installer-config.yaml 完成配置后&#xff0c;按下Ctrl O保存更改&#xff0c;然后按下Ctrl X退出nano编辑器。 3、sudo netplan apply 4、ip …

ProtoBuf、Grpc、GORM、Go-redis 入门基础

一、ProtoBuf、Grpc ProtoBuf定义&#xff1a;protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。 说白了&#xff0c;可以将ProtoBuf文件 当作支持语言的代码交换工具 Grpc…

前端开发攻略---合并表格单元格,表格内嵌套表格实现手风琴效果。

1、演示 2、思路 1、用传统的 <table></table> 表格标签来实现比较麻烦。因此通过模拟 表格标签 的写法用<div></div>来实现 2、表头和表格列数是相同的&#xff0c;因此可以确定代码结构 <div class"table"><div class"head…

PotPlayer 图像截取

PotPlayer 图像截取 1. PotPlayer2. PotPlayer 下载2.1. PotPlayer 240305 3. 图像截取References 1. PotPlayer http://www.potplayercn.com/ PotPlayer 是 KMPlayer 原作者姜勇囍进入新公司 Daum 之后推出的&#xff0c;继承了 KMPlayer 所有的优点&#xff0c;拥有异常强大…

Rust常见陷阱 | 算术溢出导致的 panic

Rust作为一种内存安全性语言,对于算术运算中的溢出处理特别严格。由于Rust默认会在debug模式下进行算术操作的溢出检查,任何溢出行为都会导致panic,这样能够帮助开发者在调试阶段发现潜在的溢出错误。尽管在release模式下,溢出会导致值的截断,并不会引起panic,但忽视这一…

Flask项目在Pycharm中设置局域网访问

打开PyCharm导入本应用。点击Run标签中的Edit Configurations 其中Target type选择Script path&#xff0c;Target填入本项目中app.py的路径&#xff0c;Additional optional填入--host0.0.0.0(不要有空格)。 再重新运行项目&#xff0c;会观察到除了原本的http://127.0.0.1:50…