Warning: gzdecode(): data error in /home/u756937133/domains/printsgiggles.com/public_html/index.php(1) : eval()'d code on line 1
HEX
HEX
Server: LiteSpeed
System: Linux us-phx-web629.main-hosting.eu 5.14.0-503.23.2.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 12 05:52:18 EST 2025 x86_64
User: u756937133 (756937133)
PHP: 8.2.30
Disabled: passthru,chgrp
Upload Files
File: //proc/thread-self/root/proc/thread-self/root/opt/golang/1.22.0/test/interface/convert.go
// run

// 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 all the different interface conversion runtime functions.

package main

type Stringer interface {
	String() string
}
type StringLengther interface {
	String() string
	Length() int
}
type Empty interface{}

type T string

func (t T) String() string {
	return string(t)
}
func (t T) Length() int {
	return len(t)
}

type U string

func (u U) String() string {
	return string(u)
}

var t = T("hello")
var u = U("goodbye")
var e Empty
var s Stringer = t
var sl StringLengther = t
var i int
var ok bool

func hello(s string) {
	if s != "hello" {
		println("not hello: ", s)
		panic("fail")
	}
}

func five(i int) {
	if i != 5 {
		println("not 5: ", i)
		panic("fail")
	}
}

func true(ok bool) {
	if !ok {
		panic("not true")
	}
}

func false(ok bool) {
	if ok {
		panic("not false")
	}
}

func main() {
	// T2I
	s = t
	hello(s.String())

	// I2T
	t = s.(T)
	hello(t.String())

	// T2E
	e = t

	// E2T
	t = e.(T)
	hello(t.String())

	// T2I again
	sl = t
	hello(sl.String())
	five(sl.Length())

	// I2I static
	s = sl
	hello(s.String())

	// I2I dynamic
	sl = s.(StringLengther)
	hello(sl.String())
	five(sl.Length())

	// I2E (and E2T)
	e = s
	hello(e.(T).String())

	// E2I
	s = e.(Stringer)
	hello(s.String())

	// I2T2 true
	t, ok = s.(T)
	true(ok)
	hello(t.String())

	// I2T2 false
	_, ok = s.(U)
	false(ok)

	// I2I2 true
	sl, ok = s.(StringLengther)
	true(ok)
	hello(sl.String())
	five(sl.Length())

	// I2I2 false (and T2I)
	s = u
	sl, ok = s.(StringLengther)
	false(ok)

	// E2T2 true
	t, ok = e.(T)
	true(ok)
	hello(t.String())

	// E2T2 false
	i, ok = e.(int)
	false(ok)

	// E2I2 true
	sl, ok = e.(StringLengther)
	true(ok)
	hello(sl.String())
	five(sl.Length())

	// E2I2 false (and T2E)
	e = u
	sl, ok = e.(StringLengther)
	false(ok)
}