我最近喜欢Go编程语言,到目前为止,我发现它很棒,但实际上很难理解接口。我已经阅读了很多有关它们的内容,但对我来说它们仍然很抽象。
我使用下面的接口编写了一些快速的代码:
package main
import (
"fmt"
"math"
)
type Circer interface {
Circ() float64
}
type Square struct {
side float64
}
type Circle struct {
diam, rad float64
}
func (s *Square) Circ() float64 {
return s.side * 4
}
func (c *Circle) Circ() float64 {
return c.diam * math.Pi
}
func (c *Circle) Area() float64 {
if c.rad == 0 {
var rad = c.diam / 2
return (rad*rad) * math.Pi
} else {
return (c.rad*c.rad) * math.Pi
}
}
func main() {
var s = new(Square)
var c = new(Circle)
s.side = 2
c.diam = 10
var i Circer = s
fmt.Println("Square Circ: ", i.Circ())
i = c
fmt.Println("Circle Circ: ", i.Circ())
}
我真的看不到Circer界面的用途。这些方法已经编写好了,我可以通过直接在结构上直接调用它们而不是使用Circer作为包装器来保存两行代码。
有什么我想念的吗?我使用接口不正确吗?任何帮助或示例,不胜感激。
接口的要点是您可以进行ShowMeTheCircumference
如下所示的通用功能。
package main
import (
"fmt"
"math"
)
type Circer interface {
Circ() float64
}
type Square struct {
side float64
}
type Circle struct {
diam, rad float64
}
func (s *Square) Circ() float64 {
return s.side * 4
}
func (c *Circle) Circ() float64 {
return c.diam * math.Pi
}
func ShowMeTheCircumference(name string, shape Circer) {
fmt.Printf("Circumference of %s is %f\n", name, shape.Circ())
}
func main() {
square := &Square{side: 2}
circle := &Circle{diam: 10}
ShowMeTheCircumference("square", square)
ShowMeTheCircumference("circle", circle)
}
游乐场链接
问题内容: 我在htmlunit中单击链接时遇到问题。我浏览了网站上的api(对此我不太了解),并查看了所有可以找到的示例代码,但是单击链接仍然有问题。 这是错误消息的顶部(它相当大,如果您希望我可以全部提交) 第一页加载正常,但是当我单击第二个链接时,出现此错误(链接为javascript)。这是我的代码的一部分 如果我执行打印链接2,则会得到: 起初我以为HtmlAnchor可能是个问题,所以
这个问题直接类似于使用TypeScript进行类类型检查
7.2. 接口类型 接口类型具体描述了一系列方法的集合,一个实现了这些方法的具体类型是这个接口类型的实例。 io.Writer类型是用的最广泛的接口之一,因为它提供了所有的类型写入bytes的抽象,包括文件类型,内存缓冲区,网络链接,HTTP客户端,压缩工具,哈希等等。io包中定义了很多其它有用的接口类型。Reader可以代表任意可以读取bytes的类型,Closer可以是任意可以关闭的值,例如一
问题内容: 这个问题是使用TypeScript进行类类型检查的直接类比 我需要在运行时找出类型为any的变量是否实现了接口。这是我的代码: 如果在打字机游乐场输入此代码,则最后一行将被标记为错误,“名称A在当前作用域中不存在”。但这不是事实,该名称确实存在于当前范围内。我什至可以将变量声明更改为无编辑者的抱怨。浏览完网络并在SO上找到另一个问题后,我将接口更改为一个类,但是后来我无法使用对象文字来
我以前也这样做过,但由于某种原因,我在创建这个连接池时确实遇到了一些困难。在创建连接池后ping连接池时,我收到以下错误: 我在创建池时提供的信息如下: : 3306; : bondsaverdb; :localhost; : root; :我的密码; 有什么我遗漏的吗?我有拼写错误或输入错误的地方吗? 先谢谢!
7.12. 通过类型断言询问行为 下面这段逻辑和net/http包中web服务器负责写入HTTP头字段(例如:"Content-type:text/html)的部分相似。io.Writer接口类型的变量w代表HTTP响应;写入它的字节最终被发送到某个人的web浏览器上。 func writeHeader(w io.Writer, contentType string) error { if