go init1 源码

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

golang init1 代码

文件路径:/src/cmd/compile/internal/types2/testdata/check/init1.go

// Copyright 2013 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.

// initialization cycles

package init1

// issue 6683 (marked as WorkingAsIntended)

type T0 struct{}

func (T0) m() int { return y0 }

var x0 = T0{}

var y0 /* ERROR initialization cycle */ = x0.m()

type T1 struct{}

func (T1) m() int { return y1 }

var x1 interface {
	m() int
} = T1{}

var y1 = x1.m() // no cycle reported, x1 is of interface type

// issue 6703 (modified)

var x2 /* ERROR initialization cycle */ = T2.m

var y2 = x2

type T2 struct{}

func (T2) m() int {
	_ = y2
	return 0
}

var x3 /* ERROR initialization cycle */ = T3.m(T3{}) // <<<< added (T3{})

var y3 = x3

type T3 struct{}

func (T3) m() int {
	_ = y3
	return 0
}

var x4 /* ERROR initialization cycle */ = T4{}.m // <<<< added {}

var y4 = x4

type T4 struct{}

func (T4) m() int {
	_ = y4
	return 0
}

var x5 /* ERROR initialization cycle */ = T5{}.m() // <<<< added ()

var y5 = x5

type T5 struct{}

func (T5) m() int {
	_ = y5
	return 0
}

// issue 4847
// simplified test case

var x6 = f6
var y6 /* ERROR initialization cycle */ = f6
func f6() { _ = y6 }

// full test case

type (
      E int
      S int
)

type matcher func(s *S) E

func matchList(s *S) E { return matcher(matchAnyFn)(s) }

var foo = matcher(matchList)

var matchAny /* ERROR initialization cycle */ = matcher(matchList)

func matchAnyFn(s *S) (err E) { return matchAny(s) }

相关信息

go 源码目录

相关文章

go blank 源码

go builtins0 源码

go builtins1 源码

go chans 源码

go compliterals 源码

go const0 源码

go const1 源码

go constdecl 源码

go conversions0 源码

go conversions1 源码

0  赞