Skip to content

error accessing struct property #51271

@andrewhodel

Description

@andrewhodel

What version of Go are you using (go version)?

$ go version
go version go1.17.6 darwin/amd64

Does this issue reproduce with the latest release?

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/zip/Library/Caches/go-build"
GOENV="/Users/zip/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/zip/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/zip/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.17.6"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/2n/6lp_hgtd1jzbhrzvzldlm8m40000gn/T/go-build301895266=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

	d := websocket.Dialer{TLSClientConfig: &tls.Config{RootCAs: roots}}

	c, _, err := d.Dial(u.String(), nil)

	if err != nil {
		fmt.Println("dial:", err)
	}
	defer c.Close()

	// get the tls.Conn
	uc := c.UnderlyingConn()

	fmt.Println(reflect.TypeOf(uc))
	fmt.Printf("%+v\n", uc)
	fmt.Println(uc.conn)

Here is the struct information, printed with reflect.TypeOf() and %+v:

*tls.Conn
&{conn:0xc000010078 isClient:true handshakeFn:0x41b05a0 handshakeStatus:1 handshakeMutex:{state:0 sema:0} handshakeErr:<nil> vers:772 haveVers:true config:0xc0002e4180 handshakes:1 didResume:false cipherSuite:4865 ocspResponse:[] scts:[] peerCertificates:[0xc0002cd080]

What did you expect to see?

To be able to access uc.conn

What did you see instead?

uc.conn undefined (type net.Conn has no field or method conn)

uc.conn is defined, as shown from the output of fmt.Printf("%+v\n", uc)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions