go embed2 源码

  • 2022-07-15
  • 浏览 (869)

golang embed2 代码

文件路径:/test/interface/embed2.go

// errorcheck

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test methods derived from embedded interface and *interface values.

package main

import "os"

const Value = 1e12

type Inter interface {
	M() int64
}

type T int64

func (t T) M() int64 { return int64(t) }

var t = T(Value)
var pt = &t
var ti Inter = t
var pti = &ti

type S struct{ Inter }

var s = S{ti}
var ps = &s

type SP struct{ *Inter } // ERROR "interface"

var i Inter
var pi = &i

var ok = true

func check(s string, v int64) {
	if v != Value {
		println(s, v)
		ok = false
	}
}

func main() {
	check("t.M()", t.M())
	check("pt.M()", pt.M())
	check("ti.M()", ti.M())
	check("pti.M()", pti.M()) // ERROR "pointer to interface, not interface|no field or method M"
	check("s.M()", s.M())
	check("ps.M()", ps.M())

	i = t
	check("i = t; i.M()", i.M())
	check("i = t; pi.M()", pi.M()) // ERROR "pointer to interface, not interface|no field or method M"

	i = pt
	check("i = pt; i.M()", i.M())
	check("i = pt; pi.M()", pi.M()) // ERROR "pointer to interface, not interface|no field or method M"

	i = s
	check("i = s; i.M()", i.M())
	check("i = s; pi.M()", pi.M()) // ERROR "pointer to interface, not interface|no field or method M"

	i = ps
	check("i = ps; i.M()", i.M())
	check("i = ps; pi.M()", pi.M()) // ERROR "pointer to interface, not interface|no field or method M"

	if !ok {
		println("BUG: interface10")
		os.Exit(1)
	}
}

相关信息

go 源码目录

相关文章

go assertinline 源码

go bigdata 源码

go convert 源码

go convert1 源码

go convert2 源码

go embed 源码

go embed1 源码

go embed3 源码

go explicit 源码

go fail 源码

0  赞