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

news2024/9/22 13:34:11

  使用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服务器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT:三大特性

QT的三大特性&#xff1a; 1、信号与槽 2、内存管理 3、事件处理 1、信号与槽 当信号产生时&#xff0c;就会自动调用绑定的槽函数。 自定义信号: 类中需要添加O_OBJECT宏 声明: signals标签之下进行声明 定义&#xff1a; 信号不需要定义 …

Java项目基于Docker打包发布

一、后端项目 1.打包应用 mvn clean package -DskipTests 2、新建dockerfile文件 #基础镜像 FROM openjdk:8 #工作空间 WORKDIR /opt #复制文件 COPY wms-app-1.0-SNAPSHOT.jar app.jar #配置容器暴漏的端口 EXPOSE 8080 RUN ls #强制执行命令 ENTRYPOINT [ "java&quo…

谷粒商城——缓存的概念

1. 使用缓存的好处&#xff1a;减少数据库的访问频率&#xff0c;提高用户获取数据的速度。 2. 什么样的数据适合存储到缓存中&#xff1f; ①及时性、数据一致性要求不高的数据&#xff0c;例如物流信息、商品类目信息 ②访问量大更新频率不高的数据(读多、写少) 3. 读模式…

sentinel熔断规则详解

1、慢调用降级熔断 1.1、参数详解 最大RT&#xff1a;调用接口的最大时间。 比例阈值&#xff1a;超过了最大RT调用时间的请求的比例。 熔断时长&#xff1a;触发熔断后&#xff0c;熔断的时间 最小请求数据&#xff1a;每秒最少的请求数量&#xff0c;只有大于等于这个数…

电网的正序参数和等值电路(一)

本篇为本科课程《电力系统稳分析》的笔记。 本篇为第二章的第一篇笔记。 电力系统正常运行中&#xff0c;可以认为系统的三相结构和三相负荷完全对称。而对称三相的计算可以用一相来完成&#xff0c;其中所有给出的标称电压都是线电压的有效值&#xff0c;假定系统全部是Y-Y型…

基于Python3的数据结构与算法 - 16 链表

目录 链表 1. 创建链表 2. 链表的插入和删除 3. 双链表 4. 链表总结 链表 链表是由一系列节点组成的元素集合。每个节点包含两部分&#xff0c;数据域item和指向下一个节点得指针next。通过节点之间的相互连接&#xff0c;最终串联成一个链表。 class Node:def __init…

Unity访问安卓(Android)或苹果(iOS)相册

1.下载Native Gallery for Android & iOS插件 2.在场景中添加截图按钮、选择图片按钮、选择视频按钮等 using OpenCVForUnity.CoreModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.UnityUtils; using System.Collections; using System.Collections.Gen…

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs&#xff1a;指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文Scraper&#xff1a;爬虫自动化数据清洗数据分析 点击 Explore GPTs&#xff1a; Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文 搜索 Scho…

C语言 swab 函数学习

swab函数交换字符串中相邻两个字节&#xff1b; void _swab( char *src, char *dest, int n ); char *src&#xff1a; 要拷贝、转换的字符串&#xff0c; char *dest&#xff0c;转换后存储到dest所表示的字符串&#xff0c; int n要拷贝、转换的字节数&#xff1b; 所…

交通事故档案管理系统|基于JSP技术+ Mysql+Java+Tomcat的交通事故档案管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

关于OceanBase中旁路导入的应用分享

背景 前段时间&#xff0c;在用户现场协助进行OceanBase的性能测试时&#xff0c;我注意到用户常常需要运用 insert into select 将上亿行的数据插入到一张大宽表里&#xff0c;这样的批量数据插入操作每次都需要耗时半个小时左右。对这一情况&#xff0c;我提议用户尝试采用旁…

福建科立讯通信 指挥调度管理平台 SQL注入漏洞复现(CVE-2024-2620、CVE-2024-2621)

0x01 产品简介 福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任…

SpringMVC | Spring MVC中的“拦截器”

目录: 拦截器 &#xff1a;1. 拦截器的 “概述”2. 拦截器的 “定义” (创建“拦截器”对象)3. 拦截器的 “配置” (让“拦截器”对象生效)4. 拦截器的 “执行流程”“单个拦截器”的执行流程“多个拦截器”的执行流程 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业…

python云上水果超市的设计与实现flask-django-php-nodejs

伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市&#xff0c;帮助商家进行商品信…

图论基础|深度优先dfs、广度优先bfs

dfs 与 bfs 区别 提到深度优先搜索&#xff08;dfs&#xff09;&#xff0c;就不得不说和广度优先搜索&#xff08;bfs&#xff09;有什么区别 先来了解dfs的过程&#xff0c;很多录友可能对dfs&#xff08;深度优先搜索&#xff09;&#xff0c;bfs&#xff08;广度优先搜索…

几个常用的控件(2)

目录 一、单选按钮Radiobutton和RadioButtonList 1、Radiobutton控件 &#xff08;1&#xff09;button控制方式 &#xff08;2&#xff09;Radiobutton控制方式 2、RadiobuttonList控件 二、列表框ListBox和下拉列表DropdownList 1、ListBox 2、DropdownList 三、面板…

H3C技术大全复现之高级路由交换技术 1

华子目录 VLAN 基本技术VLANIEEE 802.1Q交换机端口类型MVRP协议实验测试 VLAN扩展技术Super VLAN产生背景Super vlan&#xff08;相当于vlanif接口&#xff0c;也属于虚拟接口&#xff0c;可以充当网关&#xff09;Sub vlan&#xff08;普通vlan&#xff09;关于代理ARP普通代理…

【c++入门】命名空间,缺省参数与函数重载

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff01;本篇内容我们进入一个新的阶段&#xff0c;进入c的学习&#xff01;希望我的博客内容能对你有帮助&#xff01; 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

python智慧农业小程序flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统智慧农业采取了人工的管理方法&#xff0c;但这…

导航栏还是侧栏?flutter 跨平台适配指南

介绍 引言&#xff1a;Flutter 的跨平台特性 Flutter 是由 Google 开发的一款跨平台应用开发框架&#xff0c;它具有许多优点&#xff0c;包括性能优异、开发效率高以及良好的用户体验等。其中&#xff0c;最引人注目的特性之一就是其出色的跨平台能力。通过编写一套代码&…