golang run时报undefined错误【已解决】

简介: golang run时报undefined错误【已解决】

@[toc]

问题

在golang中同一个包中有两个文件,分别为main.go 和 server.go,main函数在main.go中,并且在main函数中引用了server.go中的一个结构体

运行时报错:
在这里插入图片描述

PS E:\myworkpace\goworkpace\go_im> go run .\main.go
# command-line-arguments
.\main.go:9:12: undefined: NewServer

原因

go run: 会先进行编译操作,而在此处的编译它只会以这个main.go为准,导致引用其他文件出现找不到的情况

go build:不一样,它会自动查找引用文件并打包


解决

方法一:

go run main.go a.go

方法二:

go run *.go

方法三:

go build

在这里插入图片描述

代码案例

main.go

package main

import "fmt"

func main() {
    fmt.Println("starting")
    server := NewServer("127.0.0.1", 8888)
    server.Start()
}

server.go

package main

import (
    "fmt"
    "net"
)

type Server struct {
    Ip   string
    Port int
}

// 创建一个server的接口
func NewServer(ip string, port int) *Server {
    server := &Server{
        Ip:   ip,
        Port: port,
    }
    return server
}

func (s *Server) Handler(conn net.Conn) {
    // 当前连接的业务
    fmt.Println("连接建立成功!")
}

// 启动服务器的接口
func (s *Server) Start() {
    // socket listen
    listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", s.Ip, s.Port))
    if err != nil {
        fmt.Println("net.Listen err: ", err)
        return
    }
    // close listen socket
    defer listener.Close()

    for {
        // accpet
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("listener accept err: ", err)
            continue
        }
        // do handler
        go s.Handler(conn)
    }

}

go.mod

module javapub.net/go_im

go 1.18

项目初始化方式,

go mod init [module]


目录
相关文章
|
4天前
|
Go
golang中make 和 new 的区别
golang中make 和 new 的区别
21 0
|
4天前
|
Go
golang中置new()函数和make()函数的区别
golang中置new()函数和make()函数的区别
|
4天前
|
Go
Golang type的两种用法
Golang type的两种用法
33 0
|
4天前
|
Go
Golang Flag基本使用
Golang Flag基本使用
33 0
|
11月前
|
运维 Go
学习golang(5) 初探:go 数组/slice 的基本使用
学习golang(5) 初探:go 数组/slice 的基本使用
93 0
Golang:error包错误处理
Golang:error包错误处理
81 0
|
Linux Go vr&ar
Golang cgo:如何在Go代码中调用C语言代码?
Golang cgo:如何在Go代码中调用C语言代码?
564 0
Golang cgo:如何在Go代码中调用C语言代码?
golang go get 时提示 no Go files in xxx
golang go get 时提示 no Go files in xxx
golang go get 时提示 no Go files in xxx
|
Java Linux Go
知识分享之Golang——go mod常用命令解析
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
148 0
知识分享之Golang——go mod常用命令解析
|
JSON 缓存 Go
Go-常用命令go的使用(build、env、run、fmt等)
Go-常用命令go的使用(build、env、run、fmt等)
337 0
Go-常用命令go的使用(build、env、run、fmt等)