如何使用Vlang建立一个网络服务器

1,175 阅读8分钟

使用Vlang构建网络服务器

每年都会有很多新的编程语言发布,但最终被关注的却寥寥无几。很少有人能进入顶级编程语言的名单。最近有一种语言得到了程序员的认可,尤其是后端开发人员,它就是Vlang(V)。

随着Go和Rust等静态类型编程语言的兴起,开发者对那些在这些流行语言的权衡上有所改进的语言或框架更感兴趣。在这种情况下,Vlang提出了一些巨大的要求。

这篇文章的目的是。

  • 介绍该语言及其特点。
  • 指导建立Vlang环境。
  • 指导如何用Vweb构建一个网络服务器。

什么是Vlang

Vlang(V)是一种静态类型的编程语言,灵感来自Rust、Go、Oberon、Swift、Kotlin和Python。它是开源的,并声称非常容易学习。

根据V的文档。

"浏览这个文档将花费你大约一个小时,到最后,你将学会整个语言。"

与Go和Rust相比,V对一切都采取了更严格的方法。

比如说。

  • 没有全局变量。
  • 没有null
  • 没有未定义的值。
  • 默认情况下是纯函数。
  • 使用结构体而不是对象。
  • 变量是不可改变的。

V的核心特征

让我们来看看V的一些特点。

代码风格

V编程语言促使程序员写好代码。与Rust和Golang等语言不同,V语言中只有一种编程风格。

V声称,由于其单一风格的编程方法,团队中的开发人员更容易理解,改变团队成员的代码,并建立可维护的软件。

安全性

V对编写安全、快速和内存安全的程序非常严格。

该语言的一些严格政策包括。

1.变量在默认情况下是不可变的

让我们来看看这一点是如何实现的。

// how to declare a variable 
name := 'Sammy'
println(name) //Sammy

// mutating the variable using =
name = 'Bob'
println(name)

你会得到以下错误。

main.v:2:1: error: `name` is immutable, declare it with `mut` to make it mutable
1 | name := "Sammy"
2 | name = "Bob"
    | ~~~~
3 | 
4 | println(name)

你可以变异变量的唯一方法是使用mut 关键字。

mut name := 'Sammy'
name = 'Bob'
println(name) // Bob

我们也可以使用mut 关键字来突变函数参数。

2.V函数是纯粹的

这意味着它是基于返回值的,基于参数的函数。

fn add(x int, y int) int {
    return x + y
}

3.V中没有全局变量

全局变量的问题是,随着程序规模的扩大,它们会使你的程序变得不再清晰。如果你不知道如何正确使用它们,你可能最终会写出混乱的代码。

错误处理

V并不处理throw/try/catch 块中的错误。相反,它把Option/Result 合并为一个类型。Option/Result 类型可以是无,也可以是错误或返回值。

你的写法,是在返回类型中加入一个?

fn (r Repo) find_user_by_id(id int) ?User {
	for user in r.users {
		if user.id == id {
			// V automatically wraps this into an option type
			return user
		}
	}

	return error('User $id not found')
}

在上面的代码片段中(取自V的官方文档),?User 类型,返回一个错误信息。如果你没有错误信息,你也可以使用return none

fn main() {
	repo := Repo{
		users: [User{1, 'Andrew'}, User{2, 'Bob'}, User{10, 'Charles'}]
	}
	user := repo.find_user_by_id(10) or { // Option types must be handled by `or` blocks
		return
	}

   	user := repo.find_user_by_id(7) or {
		println(err) // "User 7 not found"
		return
  	}

	println(user.id) // "10"
	println(user.name) // "Charles"
}

上面的代码片断是一个典型的例子,说明Option/Result 类型是如何工作的。err 返回传递给error() 的信息。

V的其他特点是。

  • TCC后端。主后端将V编译成人类可读的C语言。
  • V拥有每秒100万行代码的编译时间。
  • 没有任何依赖性。V是用V构建的!
  • 内存管理。在设计上,V提倡一种简单的无抽象的代码风格。

根据V的官方文档。

"自动释放引擎:编译器在编译过程中自动插入必要的释放调用,并释放大部分对象(约90-100%)。它通过引用计数释放剩余的一小部分对象"。

  • V支持跨平台的应用开发。V UI(跨平台UI工具包,支持V的本地API)和Volt(本地桌面客户端)使这成为可能。
  • 无缝部署。V需要零构建环境、头文件等。
  • 库。V有自己的软件包管理器**(vpm**)来安装新的库。
  • Clang和GCC优化。

开始使用V

让我们继续安装V并编写我们的第一个V程序。

前提条件

要继续学习本教程,你将需要。

  • 在你的机器上安装Git
  • 在你的机器上安装一个像TCC这样的C编译器。
  • 一个终端(cmd、powerhell或bash)。
  • 一个代码编辑器,如VSCode。

安装

对于Linux、macOS、FreeBSD等,打开终端并运行以下命令。

git clone https://github.com/vlang/v
cd v
make
sudo ./v symlink 

对于Windows,打开Powershell并运行。

git clone https://github.com/vlang/v
cd v
make.bat
.\v.exe symlink # this adds V to the PATH of your environmental variables

安装完成后,重新打开终端,运行此命令以确认V已经安装。

v version

你应该得到类似的信息。V 0.2.2 2b53992.

编写你的第一个V程序

打开你的代码编辑器。如果你使用VSCode,安装vlang-vscode.extension 。该扩展为你提供了Vlang的语法高亮、提示、格式化和代码片段支持。

现在让我们用V编写我们的第一个Hello World程序。

运行这个命令来创建一个hello.v 文件。

touch hello.v

然后在该文件中添加以下几行代码。

hello.v

fn main() {
  println('Hello V World!')
}

在你的终端上运行v run hello.v ,运行上面的v代码。

你应该得到。Hello V World!

在网络上使用V

官方的V语言文档声称,凡是你能用其他语言做的事,你都能用V语言做。

V编程语言有一个内置的库,用于构建网络应用程序,称为Vweb

Vweb是用V语言从头开始构建的,它很小,很容易部署。它仍然处于前alpha阶段。

尽管如此,让我们继续用Vweb编写一个简单的Web服务器。

用V构建一个Web服务器

创建一个server.v 文件并添加以下几行代码。

server.v

import vweb

struct App {
    vweb.Context
}

fn main() {
    vweb.run<App>(8080)
}

pub fn (mut app App) index() vweb.Result {
	return app.text('Hello world from vweb!')
}

首先,我们将导入vweb 模块。

接下来,我们创建一个结构,用来存放我们在应用程序中需要的任何变量。

例如,我们可以有这样的东西。

struct App{
	mut:
		count int
}

然后我们可以在程序的其他地方使用count

接下来,我们通过监听一个端口来启动网络服务器。

在纯V语言中处理这个问题的语法是。

fn run<T>(port int)

在Vweb中,run 是一个内置的方法,你可以把端口号作为一个参数传给它。这就是为什么我们有vweb.run<App>(8080)

最后,要在V中创建路由,你可以像这样指定路径。

fn (mut app App) index() vweb.Result {
    return app.text('Hello world from vweb')
}
//access the endpoint on http://localhost:8080/

fn (mut app App) test() vweb.Result {
    return app.text('Hello world from vweb')
}
//access the endpoint on http://localhost:8080/test

使用V编译器编译程序,或者在你的终端上运行v run server.v

你应该在你的终端上得到类似这样的东西。

[Vweb] Running app on http://localhost:8080

在你的浏览器上导航到http://localhost:8080。

你应该有这样的东西。

Hello world from vweb!

异常!!你刚刚写了你的第一个V网络服务器。

Gitly是用V和Vweb构建的GitHub/GitLab的替代品。

现在你可以探索网络库了。

为什么使用V(并为其发展做出贡献)

V相对来说还是一种非常新鲜的编程语言,也是一种非常有前途的语言。

它有超过25个GitHub赞助商,23k个GitHub星级,43个赞助人,每月贡献875美元。能够在如此短的时间内为该语言获得如此多的赞助商,表明Alex Medvednikov和其他381个开源贡献者正在建立一些很酷的东西。

以下是探索该语言的一些理由。

V并没有重新发明轮子

V并没有试图通过构建现有的东西来浪费我们的时间。相反,它正在过滤你在C、Go、Oberon、Rust、Python等语言上不喜欢的功能。

V希望你用其严格的编程风格写出更少的错误代码

虽然这在开发过程中可能成本很高,但在生产过程中你会得到好处,因为你总是能得到你预期的输出,因此没有未定义的行为

V是开源的

该语言现在已经在GitHub上完全开放供人贡献。到今天为止,它已经有超过381个贡献。

仍然有很多工作在进行中(WIP)。该语言的大多数部分,特别是库,仍在开发中。你使用的Vweb库就是一个WIP。你可以作为一种爱好为它的发展作出贡献。

免责声明:我的目的不是鼓励你在生产中抛弃你目前的后台语言或框架而使用Vlang。

总结

这篇文章强调了V编程语言的核心功能、片段、想法并分享了对它的见解。

在这篇文章中,当你用Vlang库构建一个简单的服务器,使用Vweb构建网络应用程序时,你对该语言的网络功能有了一个快速的概述。