使用Go语言创建HTTP服务器并展示网页

  使用Go语言创建一个简单的服务器时可以先建立一个项目根目录,随后在根目录中建立一个用于存放静态文件(HTML/CSS/JavaScript)的文件夹 GGboy,接下来输入命令初始化Go模块

go mod init GGboy // 项目名称是 GGboy

  在出现 go.mod 文件后即可开始编写 main.go 文件,该文件用于创建和启动HTTP服务器

// main.go

package main

import (
	"log"      // 记录日志信息的包
	"net/http" // 网络请求包
)

func main() {
	// 定义静态文件目录, 用来存放.html和.css、.javascript文件的文件夹
	dir := "C:\\.......\\GGboy"

	// 设置路由
	http.Handle("/", http.FileServer(http.Dir(dir)))

	// 打开8080端口
	log.Println("打开端口:8080")
	if err := http.ListenAndServe(":8080", nil); err != nil {
		log.Fatal(err)
	}
}

编写好后即可输入命令运行HTTP服务器,但目前前端页面还没有写,项目还无法运行。

接下在GGboy文件夹中创建 index.html, 编写酷炫的HTML页面,在页面中插入图片及Go语言介绍,为字体进行css优化

<!-- index.html -->
<!DOCTYPE html>  
<html lang="zh">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>GGboy</title>  
    <link rel="stylesheet" href="styles.css">  
</head>  
<body>  
    <header>  
        <h1 class="colorful-title">欧耶!原来是GGboy</h1>  
    </header>  
    <main>  
        <section class="image-gallery">  
        </section> 
        <section class="character-info">  
            <h2>猪猪侠介绍</h2>  
            <p id="pigHeroIntro">猪猪侠是一个勇敢而聪明的超级英雄,他总是勇敢地面对挑战,用他的智慧和力量保护他的朋友和家园。他有一颗善良的心,总是乐于助人,深受大家的喜爱。</p>  
            <h3>Go语言介绍</h3>  
            <p id="goLangIntro">  
                Go语言是一种由猪猪侠新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:  
                <br>  
                1. 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。  
                <br>  
                2. Go语言为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。  
                <br>  
                3. Go语言是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。  
                <br>  
                4. Go语言完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。  
                <br>  
                按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。  
                <br>  
                Go语言是一种猪猪型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。  
            </p>  
        </section> 
    </main>  
    <script src="script.js"></script>
    <button onclick="window.location.href='https://www.csdn.net/';">快来点击小猪猪</button> 
</body>  
</html>

 在同文件夹中创建 script.js 文件,用来插入图片,在图片无法加载时显示错误提示

// script.js
document.addEventListener('DOMContentLoaded', function() {  
    const imageGallery = document.querySelector('.image-gallery');  
    const imageUrls = [  
        'https://tse3-mm.cn.bing.net/th/id/OIP-C.X7-Eyw-eFgdmIMxulVXRfAHaHa?rs=1&pid=ImgDetMain',  
        'https://tse4-mm.cn.bing.net/th/id/OIP-C.lDpdCQhVNxV6HO8qkgb3cwHaHD?w=510&h=486&rs=1&pid=ImgDetMain',  
        'https://tse2-mm.cn.bing.net/th/id/OIP-C.wLioQHhuKBlwpNl24hTLZwAAAA?w=400&h=408&rs=1&pid=ImgDetMain',  
        'https://tse1-mm.cn.bing.net/th/id/OIP-C.yTP33CZBMdATDzYMH58QyQHaHa?rs=1&pid=ImgDetMain'
    ];  
  
    imageUrls.forEach(function(imageUrl) {  
        const img = document.createElement('img');  
        img.src = imageUrl;  
        img.alt = 'GGboy靓照';  
        imageGallery.appendChild(img);  
    });  
});

 在同文件夹中创建 styles.css 文件,用于优化图片及页面中的字体

/* styles.css */

body {  
    font-family: Arial, sans-serif;  
    margin: 0;  
    padding: 0;  
    background-color: #f2f2f2;  
}  
  
header {  
    background-color: #333;  
    color: white;  
    text-align: center;  
    padding: 20px;  
}  

@keyframes blink {  
    0% { opacity: 1; }  
    50% { opacity: 0; }  
    100% { opacity: 1; }  
}
  
.colorful-title {  
    font-size: 48px;  
    text-transform: uppercase;  
    letter-spacing: 2px;  
    animation: color-change 3s infinite;  
    background: linear-gradient(90deg, red, orange, yellow, green, blue, indigo, violet);  
    -webkit-background-clip: text; 
    background-clip: text; 
    -webkit-text-fill-color: transparent; 
    color: transparent;   
    animation: blink 1s linear infinite;
}  
  
@keyframes color-change {  
    0% {background-position: 0 0;}  
    50% {background-position: 100% 0;}  
    100% {background-position: 0 0;}  
}  
  

.image-gallery {  
    display: flex;  
    justify-content: space-between;
    align-items: center; 
    flex-wrap: nowrap; 
    padding: 10px; 
}  
  
.image-gallery img {  
    flex: 0 0 auto; 
    max-width: 20%; 
    margin: 0 10px; 
}

@keyframes colorChange {  
    0% { color: #ff0000; }
    20% { color: #00ff00; } 
    40% { color: #0000ff; } 
    60% { color: #ffff00; } 
    80% { color: #ff00ff; } 
    100% { color: #ff0000; } 
}  
  
#goLangIntro {  
    font-family: 'Arial', sans-serif;  
    font-size: 16px;  
    line-height: 1.6;  
    color: #333; 
    text-align: justify;  
    animation: colorChange 0.5s linear infinite;  
}  
  
#pigHeroIntro {  
    font-family: 'Arial', sans-serif;  
    font-size: 16px;  
    line-height: 1.6;  
    color: #333; 
    text-align: justify;  
    animation: colorChange 0.5s linear infinite;  
}

项目结构如下

 

在终端中输入命令运行刚才创建的Go语言HTTP服务器

go run main.go

显示以下信息即表示服务器创建成功

 

随后在浏览器顶部搜索栏中打开 http://localhost:8080  ,即可访问刚刚所创立的项目,可以看到酷炫的GGboy网页,最后在终端输入 Ctrl+C 即可关闭Go的HTTP服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475944.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

32-Java拦截过滤器模式 ( Intercepting Filter )

Java拦截过滤器模式 实现范例 拦截过滤器模式&#xff08;Intercepting Filter Pattern&#xff09;用于对应用程序的请求或响应做一些预处理/后处理定义过滤器&#xff0c;并在把请求传给实际目标应用程序之前应用在请求上过滤器可以做认证/授权/记录日志&#xff0c;或者跟踪…

Codeforces Round 496 (Div. 3)

目录 A. Tanya and Stairways B. Delete from the Left C. Summarize to the Power of Two D. Polycarp and Div 3 E. Median on Segments F. Berland and the Shortest Paths A. Tanya and Stairways 简单性质题 我们找到性质&#xff0c;如果这个数大于等于后面的数就…

网工内推 | 云计算工程师,HCIE认证优先,最高18k*14薪

01 杭州中港科技有限公司 招聘岗位&#xff1a;云计算工程师 职责描述&#xff1a; 1、承担云计算相关工程交付、业务上云及售前测试&#xff0c;从事虚拟化、桌面云、存储、服务器、数据中心、大数据、相关产品的工程项目交付或协助项目交付。 2、承担云计算维护工程师职责&…

mac安装rust开发环境,使用brew安装和全局配置

mac下使用brew可以一键安装环境&#xff1a; brew install rustup 安装完成执行&#xff1a; rustup-init 按照提示配置即可&#xff1a; 出现&#xff1a; 想要全局生效&#xff1a; echo export PATH"$HOME/.cargo/bin:$PATH" >> ~/.bash_profile source…

代码随想录算法训练营第day53|1143.最长公共子序列 、 1035.不相交的线、 53. 最大子序和 动态规划

目录 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 1143.最长公共子序列 力扣题目链接(opens new window) 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原…

Windows 设置多显示器显示

Windows 设置多显示器显示 1. Windows 7 设置 HDMI 输出2. Windows 11 设置多显示器显示References 1. Windows 7 设置 HDMI 输出 2. Windows 11 设置多显示器显示 ​​​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

深度学习_20_卷积中的填充与步幅

如果图片本身比较小&#xff0c;卷积之后输出也会很小&#xff0c;那么可以在图片与卷积核相乘之前先填充一下&#xff0c;让输出为预期大小 一般填充后输入&#xff0c;输出相同 当图片比较大的时候&#xff0c;如果利用卷积核去得到我们想要的大小的话&#xff0c;得用到多层…

javaSwing日记管理系统

一、简介 使用 Java Swing 开发日记管理系统 在今天的博客中&#xff0c;我将向您介绍如何使用 Java Swing 开发一个简单而功能强大的日记管理系统。这个系统将具有登录、注册、找回密码、写日志以及切换主题等功能。我们将使用 MySQL 数据库来存储用户信息和日记内容。 二、…

ShardingSphere+JPA+Druid实现分表操作

要在SpringBoot项目中实现分表操作&#xff0c;本文使用的是ShardingSphereJPADruid实现。过程中出现问题记录一下。 准备MySQL数据库表 这里准备的是一张主表test_cost&#xff0c;两张从表test_cost_0和test_cost_1&#xff0c;结构需要相同&#xff0c;主表只是声明了表结构…

python异常:pythonIOError异常python打开文件异常

1.python读取不存在的文件时&#xff0c;抛出异常 通过 open()方法以读“r”的方式打开一个 abc.txt 的文件&#xff08;该文件不存在&#xff09;&#xff0c;执行 open()打开一个不存在的文件时会抛 IOError 异常&#xff0c;通过 Python 所提供的 try...except...语句来接收…

基于springBoot 整合JavaMail的网站邮件通知功能实现

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 SpringBoot 版本&#xff1a;v2.5.7 文章目录 一、关于邮件发送的基本概念1.1 邮件发送1.1.1 SMTP协议 1.2 邮件接收1.2.1 POP3协议1.2.2 IMAP协议 二、准备工作2.1 注册邮箱2.1 获取登录授权码 三、开发…

走进jvm之垃圾回收器篇

这里我想首先说明一下&#xff0c;虽然我们经常会拿垃圾回收器来做比较&#xff0c;虽然想挑选一个最好的收集器出来&#xff0c;但是目前也没有说哪一款收集器是完美的&#xff0c;更不存在万能的收集器&#xff0c;我们也只是对收集器选择最适合场景的一个收集器。 那么作者将…

Springboot+Vue前后端分离的在线图书商城(书城)系统

项目介绍 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

UE snap02 解析ASCII文本文件

UE snap02 解析ASCII文本文件 示例数据data.dat 11389477.2714892 3364559.73645693 0 11389471.5162524 3364567.8860295 0 11389471.5162524 3365813.09618369 0 11388329.6082659 3366184.85895869 0 11388320.4775297 3366197.78833087 0 11388270.6882384 3366214.84811…

OpenAI Sora文生视频模型技术报告中英全文

Video generation models as world simulators 视频生成模型作为世界模拟器 We explore large-scale training of generative models on video data. Specifically, we train text-conditional diffusion models jointly on videos and images of variable durations, resolu…

jQuery 元素操作

文章目录 1. jQuery 样式操作1.1 操作 css 方法1.2 设置类样式方法*案例--tab栏切换 1.3 类操作和className 区别 2. jQuery 效果2.1 显示隐藏效果2.2 滑动效果事件切换动画队列及其停止排队方法 3.3 淡入淡出效果利用渐进方式调整透明度*案例--高亮突出显示 3.4 自定义动画 an…

国务院办公厅发布:政府类网站网页设计规范(试行)

国务院办公厅于2019年12月发布了《政府类网站网页设计规范&#xff08;试行&#xff09;》。该规范的发布旨在统一政府类网站的设计风格和标准&#xff0c;提升政府网站的用户体验和可访问性&#xff0c;推动政府信息公开和服务的提升。 该规范涵盖了政府类网站的各个方面&…

Java IO流(超详细!)上篇

目录 一、File类1、操作文件和目录 二、I/O流概述1、按流向划分&#xff1a;输入流和输出流2、按处理单元划分&#xff1a;字节流和字符流3、按流的角色划分&#xff1a;节点流和处理流 三、字节流1、字节输出流基类&#xff1a;OutputStream2、字节输出流FileOutputStream类3、…

未来已来?国内10家AI大模型盘点(附体验网址)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、阿里云——通义千问2、科大讯飞——星火大模…

全局过滤器实现Jwt校验

从Session到Jwt 之前我写过一篇 什么是 httpsession &#xff1a; 理解HttpSession 在经典的那个登录场景中&#xff1a; 客户端第一次访问的时候 需要登录 登录成功之后 后面再次访问的时候 为了让服务器认识 这是已经登录成功的我 在session中存储的用户的信息。 现在我…