V lang for nodejs developers
29
stars
28
commits
Jan 1, 2026
updated
Understanding vlang using node js examples
Vlang examples compared with NodeJs
Inspired by golang-for-nodejs-developers. Structure of the example is almost same as this repo.
buffers
streams
reading
writing
event emitter
regex
exec (sync)
exec (async)
tcp server
udp server
gzip
dns
crypto
sha256
env vars
cli args
cli flags
// single line comment
/**
* multi line comments
*/
// Single line comment.
/*
Multiline comment.
*/
console.log('Print log to console') // Stdout
var randomString = 'some random sting';
var someInt = 1;
console.log('Format printing example %s %d', randomString , someInt)
console.error('Print some error message') // Stderr
Print log to console
Format printing example some random sting 1
Print some error message
fn main(){
random_string := 'some random string'
some_int := 1
println('Prints a message in v with new line')
println('Format printing example $random_string $some_int')
eprintln('Print error message')
}
Prints a message in v with new line
Format printing example some random string 1
Print error message
console.log((new Date()).toISOString(), '-', 'Log message')
2022-08-14T02:27:36.509Z - Log message
import log
fn main() {
mut l := log.Log{
level: .info
output_target: .console
}
l.info('info message')
}
2022-08-14T05:30:40.117Z - info message
// function scoped
var x = 'Cat 🐈'
// block scoped
let y = 'Dog 🐕'
// constant
const z = 'Fox 🦊'
mut y := 'Dog 🐕'
y = 'Monkey 🐒'
println(y)
x := 'Cat 🐈'
// You can not assign a value to `x` again
// x = '10'
println(x)
Monkey 🐒
Cat 🐈
// 7 Primitive types
// string
const sampleString = 'Hello Tom'
console.log(typeof(sampleString))
// number
const count = 10
console.log(typeof(count))
// boolean
const isEnabled = false
console.log(typeof(isEnabled))
// null
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof#typeof_null
const salary = null
console.log(typeof(salary)); // It is object
// undefined
const isMale = undefined
console.log(typeof(isMale));
// symbol
const mySymbol = Symbol()
console.log(typeof(mySymbol));
// bigint
const myBigInt = 123242343343n
console.log(typeof(myBigInt));
string
number
boolean
object
undefined
symbol
bigint
// string
a := 'Sample string'
println(typeof(a).name)
//int
b := 10
println(typeof(b).name)
//bool
c := true
println(typeof(c).name)
// No null, no undefined data types
// Couldn't find anything related to javascript`s Symbol
big_int := i64(9999999999)
println(typeof(big_int).name)
string
int
bool
i64
const os = 'Mac'
const version = 13
const message = `You are using ${os} version ${version}`
console.log(message)
You are using Mac version 1
fn main() {
os := 'Mac'
version := 13
println('You are using $os version $version')
}
You are using Mac version 13
function check_os(os) {
if (os === 'mac') {
console.log('Use homebrew')
} else if (os === 'windows') {
console.log('Use .exe')
} else {
console.log('Support only for mac and windows')
}
}
check_os('mac')
check_os('Linux')
check_os('windows')
Use homebrew
Support only for mac and windows
Use .exe
fn check_os(os string) {
if os == 'mac' {
println('Use homebrew')
} else if os == 'windows' {
println('Use .exe')
} else {
println('Support only for mac and windows')
}
}
fn main() {
check_os('mac')
check_os('Linux')
check_os('windows')
}
Use homebrew
Support only for mac and windows
Use .exe
const colors = ['Red', 'Black', 'Blue', 'White', 'Pink']
for (let i in colors) {
console.log(colors[i]);
}
for (let i in colors) {
console.log(`Index ${i} ${colors[i]}`);
}
Red
Black
Blue
White
Pink
Index 0 Red
Index 1 Black
Index 2 Blue
Index 3 White
Index 4 Pink
fn main() {
colors := ['Red', 'Black', 'Blue', 'White', 'Pink']
for color in colors {
println(color)
}
for i, color in colors {
println('Index $i $color')
}
}
Red
Black
Blue
White
Pink
Index 0 Red
Index 1 Black
Index 2 Blue
Index 3 White
Index 4 Pink
let sum = 0
let i = 0
while (i <= 10) {
sum += i
i++
}
console.log(sum);
55
mut sum := 0
mut i := 0
for i <= 10 {
sum += i
i++
}
println(sum)
55
const value = 'Green'
switch (value) {
case 'Red':
console.log('Stop')
break
case 'Yellow':
console.log('Slowdown')
break
case 'Green':
console.log('Go..')
break
default:
console.log('Something wrong')
}
Go..
signal := 'Green'
match signal {
'Red' { println('Stop') }
'Yellow' { println('Slowdown') }
'Green' { println('Go..') }
else { println('Something wrong') }
}
Go..
let colors = ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
console.log(colors.length) // length of an array
console.log(colors[1]) // access element by index
colors.push('Orange') // append an element to an array
const colors_copy = [...colors] // copy of colors array.
console.log(colors_copy)
console.log(colors.sort()) // Sort an array
console.log(colors.pop()); // removes last element(Yellow) of an array and returns it
console.log(colors.includes('Yellow')) // false
5
Green
[ 'Red', 'Green', 'Yellow', 'Blue', 'Purple', 'Orange' ]
[ 'Blue', 'Green', 'Orange', 'Purple', 'Red', 'Yellow' ]
Yellow
false
fn main() {
mut colors := ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
println(colors.len)
println(colors[1])
colors << 'Orange'
colors_copy := colors.clone()
println(colors_copy)
colors.sort()
println(colors)
println(colors.pop())
println('Yellow' in colors)
}
5
Green
['Red', 'Green', 'Yellow', 'Blue', 'Purple', 'Orange']
['Blue', 'Green', 'Orange', 'Purple', 'Red', 'Yellow']
Yellow
false
let colors = ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
colors.forEach((color) => console.log(color))
let upper = colors.map((color) => color.toUpperCase())
console.log(upper);
let numbers = [1, 2, 3, 4, 5, 6]
even_numbers = numbers.filter(value => value % 2 == 0)
console.log(even_numbers);
let sum = numbers.reduce(
(previousValue, currentValue) => previousValue + currentValue, 0
);
console.log(sum);
Red
Green
Yellow
Blue
Purple
[ 'RED', 'GREEN', 'YELLOW', 'BLUE', 'PURPLE' ]
[ 2, 4, 6 ]
21
import arrays
fn main() {
mut colors := ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
for color in colors {
println(color)
}
upper := colors.map(fn (w string) string {
return w.to_upper()
})
println(upper)
numbers := [1, 2, 3, 4, 5, 6]
even_numbers := numbers.filter(it % 2 == 0)
println(even_numbers)
m := arrays.reduce(numbers, fn (t1 int, t2 int) int {
return t1 + t2
})?
println(m)
}
Red
Green
Yellow
Blue
Purple
['RED', 'GREEN', 'YELLOW', 'BLUE', 'PURPLE']
[2, 4, 6]
21
const employee_details = new Map()
employee_details.set('name', 'John')
employee_details.set('gender', 'Male')
// Iterate map
for (let [key, value] of employee_details) {
console.log(key, '->', value)
}
console.log(employee_details.has('gender'))
console.log(employee_details.get('gender'))
console.log(typeof (employee_details));
console.log(employee_details.get('bad_key'))
employee_details.delete('name')
console.log(employee_details);
name -> John
gender -> Male
true
Male
object
undefined
Map { 'gender' => 'Male' }
mut employee_details := {
'name': 'John'
'gender': 'Male'
}
for key, value in employee_details {
println('$key -> $value')
}
println('gender' in employee_details)
println(employee_details['gender'])
println(typeof(employee_details).name)
println('bad_key' in employee_details)
employee_details.delete('name')
println(employee_details)
name -> John
gender -> Male
true
Male
map[string]string
false
{'gender': 'Male'}
const employee = {
name: {
'firstname': 'Jack',
'lastname': 'Dane'
},
fullname: function () {
return `${this.name.firstname} ${this.name.lastname}`
}
}
let fullname = employee.fullname()
console.log(employee.name.firstname);
console.log(fullname);
Jack
Jack Dane
struct Name {
firstname string
lastname string
}
struct Employee {
Name
}
fn (name Name) fullname() string {
return '$name.firstname $name.lastname'
}
mut a := Employee{
firstname: 'Jack'
lastname: 'Dane'
}
println(a.firstname)
println(a.fullname())
Jack
Jack Dane
const os = require('os')
// function with out arguments
function get_os() {
return os.platform()
}
// function with argument
function get_string_len(s) {
return s.length
}
console.log(get_os())
console.log(get_string_len('Hello 🚀'))
darwin
8
import os
// function with out arguments
fn get_os() string {
return os.user_os()
}
// function with argument
fn get_string_len(s string) int {
return s.len
}
fn main() {
println(get_os())
println(get_string_len('Hello 🚀')) // Emoji holds 4
}
macos
10
function get_order({
food,
size = 'Medium'
}) {
return `${size} size ${food}`
}
order_1 = get_order({food: 'Pizza 🍕'})
order_2 = get_order({food: 'Beer 🍺', size: 'Large'})
console.log(order_1);
console.log(order_2);
Medium size Pizza 🍕
Large size Beer 🍺
// Need to use struct to set default params
struct Options {
food string
size string = 'Medium'
}
fn get_order(opt Options) string {
return '$opt.size size $opt.food'
}
fn main() {
order_1 := get_order(Options{
food: 'Pizza 🍕'
})
order_2 := get_order(Options{
food: 'Beer 🍺'
size: 'Large'
})
println(order_1)
println(order_2)
}
Medium size Pizza 🍕
Large size Beer 🍺
let person = {
age: 50,
name: 'Sam'
};
let { age, name } = person
console.log(age);
console.log(name);
50
Sam
struct Person {
age int
name string
}
fn main() {
person := Person{
age: 50
name: 'Sam'
}
age, name := person.age, person.name
println(age)
println(name)
}
50
Sam
let colors = ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
let morecolors = ['White', ...colors]
console.log(morecolors);
[ 'White', 'Red', 'Green', 'Yellow', 'Blue', 'Purple' ]
mut colors := ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
mut morecolors := ['White']
// Not exactly equal to Javascript's spread
morecolors << colors
println(morecolors)
['White', 'Red', 'Green', 'Yellow', 'Blue', 'Purple']
// Variable arguments
function addition(...nums) {
let total = 0;
for (const num of nums){
total += num
}
return total
}
console.log(addition(1,2,3,4,5));
15
// Variable number of arguments
fn addition(nums ...int) int {
mut total := 0
for n in nums {
total += n
}
return total
}
fn main() {
println(addition(1, 2, 3, 4, 5))
}
15
let order1 = 'Salad 🥗 '
let order2 = 'Pizza 🍕'
console.log(`Wife ordered ${order1}, Husband ordered ${order2}`)
order2 = [order1, order1 = order2][0];
console.log(`They swapped and now Wife have ${order1}, husband have ${order2}`)
Wife ordered Salad 🥗 , Husband ordered Pizza 🍕
They swapped and now Wife have Pizza 🍕, husband have Salad 🥗
mut order1 := 'Salad 🥗'
mut order2 := 'Pizza 🍕'
println('Wife ordered $order1, Husband ordered $order2')
order1, order2 = order2, order1
println('They swapped and now Wife have $order1, husband have $order2')
Wife ordered Salad 🥗, Husband ordered Pizza 🍕
They swapped and now Wife have Pizza 🍕, husband have Salad 🥗
class Employee {
constructor(id) {
this.emp_id = id
this.name = 'John'
this.age = 0
this.salary = 100
}
setSalary(salary) {
return this.salary = salary
}
getEmail() {
return 'some@email'
}
}
const emp1 = new Employee(id = 100)
console.log(emp1.name)
console.log(emp1.salary);
emp1.setSalary(1000000)
console.log(emp1.salary);
console.log(emp1.getEmail());
John
100
1000000
some@email
[params]
struct EmployeeConfig {
id int
}
struct Employee {
mut:
emp_id int
name string = 'John'
age int
salary int = 100
}
fn (mut e Employee) set_salary(salary int) {
e.salary = salary
}
fn (e Employee) get_email() string {
return 'some@email'
}
fn get_emp(c EmployeeConfig) &Employee {
return &Employee{
emp_id: c.id
}
}
fn main() {
mut emp1 := get_emp(id: 100)
println(emp1.name)
println(emp1.salary)
emp1.set_salary(1_000_000)
println(emp1.salary)
email := emp1.get_email()
println(email)
}
John
100
1000000
some@email
Need help
// Current time
console.log(new Date().toLocaleString());
// Month names
const months = [...Array(12).keys()].map(key => new Date(0, key).toLocaleString('ta', { month: 'long' }))
console.log(months);
//Unix timestamp
console.log(Date.now());
let dateString = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
console.log(dateString);
const date1 = '2022-01-27';
const date2 = '2022-02-27';
const millis = new Date(date2) - new Date(date1)
const days = millis / (1000 * 60 * 60 * 24);
console.log(millis);
console.log(days);
8/20/2022, 8:16:47 PM
[
'January', 'February',
'March', 'April',
'May', 'June',
'July', 'August',
'September', 'October',
'November', 'December'
]
1661051807476
Aug 20, 2022
2678400000
31
import time
fn main() {
println(time.now())
println(time.long_months)
println(time.utc().unix_time_milli())
println(time.now().custom_format('MMM DD, YYYY'))
// Diff between two dates
mut date1 := '2022-01-27 00:00:00'
mut date2 := '2022-02-27 00:00:00'
// parse the date string to Time
pt1 := time.parse(date1)?
pt2 := time.parse(date2)?
// Subtract and divide by 24
millis := (pt2 - pt1).milliseconds() // hours between dates
days := millis / (1000 * 60 * 60 * 24)
println(millis)
println(int(days))
}
2022-08-20 20:19:22
['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
1661051962639
Aug 20, 2022
2678400000
31
setTimeout(process, 5000)
function process() {
console.log('Processing..')
}
Processing..
import sync
import time
fn process(mut wg sync.WaitGroup) {
defer {
wg.done()
}
println('Processing..')
time.sleep(5000 * time.millisecond)
}
fn main() {
mut wg := sync.new_waitgroup()
wg.add(1)
go process(mut wg)
wg.wait()
}
Processing..
const x = 'John';
(function (x) {
console.log('Hello', x)
})(x)
Hello John
fn main() {
// anonymous functions
fn (x string) {
println('Hello $x')
}('John')
}
Hello John
const fs = require('fs');
const readline = require('readline');
const path = require('path');
unix_time = Date.now()
const dir = __dirname;
const file_name = path.join(__dirname, 'file_sample.txt');
file_exist = fs.existsSync(file_name)
if (file_exist) {
console.log('file_sample.txt exist');
} else {
console.log('file_sample.txt not present');
}
let message = `${unix_time} - Log message \n`
fs.appendFile(file_name, message, function (err) {
if (err) throw err;
})
var line_reader = readline.createInterface({
input: require('fs').createReadStream(file_name)
});
line_reader.on('line', function (line) {
console.log(line);
});
fs.rm(file_name, function (err) {
if (err) throw err
})
file_sample.txt not present
1661261346709 - Log message
import os
import time
fn main() {
unix_time := time.now().unix_time_milli().str()
println(unix_time)
abs_path := os.abs_path('file_sample.txt')
// check if the file is present or not
file_exist := os.exists(abs_path)
if file_exist {
println('file_sample.txt exist')
} else {
println('file_sample.txt not present')
}
mut append_file := os.open_append(abs_path) or { panic(err) }
append_file.writeln('$unix_time - Log message')?
append_file.close()
mut read_file := os.open(abs_path)?
mut buf := []u8{len: 100}
for {
buf_read := read_file.read_bytes_into_newline(mut buf) or { panic(err) }
// convert bytes into string
s := buf#[..buf_read].bytestr()
if read_file.eof() {
break
}
println(s)
}
read_file.close()
os.rm(abs_path) or { panic(err) }
}
1661236319312
file_sample.txt not present
1661236319312 - Log message
let emplyee_1 = '{"name":"Yun", "id":87964, "email":"yun2020@someemail", "status":"active", "unused":"will be excluded"}'
let decode_emp = JSON.parse(emplyee_1)
console.log(decode_emp)
console.log(decode_emp.id)
console.log(decode_emp.name)
let encode_emp = JSON.stringify(decode_emp)
console.log(encode_emp);
{
name: 'Yun',
id: 87964,
email: 'yun2020@someemail',
status: 'active',
unused: 'will be excluded'
}
87964
Yun
{"name":"Yun","id":87964,"email":"yun2020@someemail","status":"active","unused":"will be excluded"}
import json
struct Emp {
name string
id int
email string
status string
}
fn main() {
emplyee_1 := '{"name":"Yun", "id":87964, "email":"yun2020@someemail", "status":"active", "unused":"will be excluded"}'
mut decode_emp := json.decode(Emp, emplyee_1) or {
println(err)
return
}
println(decode_emp)
println(decode_emp.id)
println(decode_emp.name)
mut encode_emp := json.encode(decode_emp)
println(encode_emp)
}
Emp{
name: 'Yun'
id: 87964
email: 'yun2020@someemail'
status: 'active'
}
87964
Yun
{"name":"Yun","id":87964,"email":"yun2020@someemail","status":"active"}
function task(value) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Completed')
}, 1e3)
})
}
(function () {
Promise.all([
task(1),
task(2),
task(3)
])
.then(result => console.log(result))
.catch(err => console.error(err))
})()
[ 'Completed', 'Completed', 'Completed' ]
import time
import rand
fn task(id int, duration int) string {
time.sleep(duration * time.millisecond)
println('task $id end')
return 'Task $id completed in $duration milliseconds'
}
fn main() {
mut threads := []thread string{}
threads << go task(1, rand.int_in_range(1000, 10000)?)
threads << go task(2, rand.int_in_range(1000, 10000)?)
threads << go task(3, rand.int_in_range(1000, 10000)?)
res := threads.wait()
println(res)
}
task 1 end
task 3 end
task 2 end
['Task 1 completed in 2131 milliseconds', 'Task 2 completed in 8710 milliseconds', 'Task 3 completed in 4047 milliseconds']
const actors = [{ name: "John", age: 18 }]
function actor_by_name(name) {
for (actor of actors) {
if (actor.name === name) {
return actor
}
}
throw Error(`Actor ${name} not exist`)
}
(function () {
try {
console.log(actor_by_name('John'))
console.log(actor_by_name('Angelina'))
} catch (e) {
console.log(e);
}
})()
{ name: 'John', age: 18 }
Error: Actor Angelina not exist
at actor_by_name (/Users/vlang-for-nodejs-developers/examples/trycatch.js:10:11)
at /Users/vlang-for-nodejs-developers/examples/trycatch.js:16:21
at Object.<anonymous> (/Users/vlang-for-nodejs-developers/examples/trycatch.js:21:3)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47
struct Actor {
name string
age int
}
struct List {
actors []Actor
}
fn (l List) by_name(name string) ?Actor {
for a in l.actors {
if a.name == name {
return a
}
}
return error('Employee $name not exist')
}
fn main() {
actor := List{
actors: [Actor{
name: 'John'
age: 18
}]
}
actor_details := actor.by_name('John') or { panic(err) }
println(actor_details)
actor_details2 := actor.by_name('Angelina') or { panic(err) }
println(actor_details2)
}
Actor{
name: 'John'
age: 18
}
V panic: Employee Angelina not exist
v hash: 3bc01d6
0 trycatch 0x000000010f7cf4cf main__main + 687
1 trycatch 0x000000010f7d01ac main + 76
2 trycatch 0x000000010f7a80b4 start + 52
3 ??? 0x0000000000000001 0x0 + 1
const http = require('http');
const server = http.createServer(function (req, res) {
var url = req.url;
if (url === '/version') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'node 16'
}));
} else {
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
error: 'Not found'
}));
}
})
server.listen(8080, function () {
console.log("Server running on 8080");
});
curl --get localhost:8080/version
{"data":"node 16"}
curl --get localhost:8080/unknowpath
{"error":"Not found"}
import vweb
struct App {
vweb.Context
}
['/version'; get]
pub fn (mut app App) get_version() vweb.Result {
return app.json({
'version': 'V 0.3'
})
}
fn main() {
vweb.run(&App{}, 8080)
}
curl --get localhost:8080/version
{"version":"V 0.3"}
curl --get localhost:8080/unknowpath
404 Not Found
//exportmodule.js
const crypto = require('crypto')
module.exports = {
get_random_num: () => Math.floor(Math.random() * 1000),
get_random_uuid: () => crypto.randomUUID()
}
// module.js
const random = require('./exportmodule')
console.log(random.get_random_num());
console.log(random.get_random_uuid());
616
079da02f-53e9-4d5c-b899-871c5d3081a1
//random/num.v
module random
import rand
// `pub` is similar to node`s module.exports
pub fn get_random_num() ?u32 {
return rand.u32_in_range(1,1000)
}
//random/uuid.v
module random
import rand
pub fn get_random_uuid() string{
return rand.uuid_v4()
}
// module.v
// import module called random which is inside random folder
import random
fn main() {
n := random.get_random_num() or { panic(err) }
println(n)
uuid := random.get_random_uuid()
println(uuid)
}
785
b00c215e-375e-4737-932f-62908f48a167
npm install packagenamenpm uninstall packagenamenpm publishv install packagenamev install --git https://github.com/vlang/markdownv remove packagenameconst fs = require("fs");
// Stdout
console.log('Hello')
process.stdout.write('Hello \n')
//stderr
console.error('Some error')
process.stderr.write('Some error \n')
// read from stdin
const data = fs.readFileSync(0, "utf-8");
console.log(data);
// run the command
echo hello stdin | node examples/stdout.js
Hello
Hello
Some error
Some error
hello stdin
import os
fn main() {
println('Hello from println')
mut o := os.stdout()
o.writeln('Hello')?
eprintln('Some error message')
mut e := os.stderr()
e.writeln('error')?
mut i := os.stdin()
mut d := i.read_bytes(100)
println(d.bytestr())
}
// run the command
echo hello stdin | v run examples/stdout.v
Hello from println
Hello
Some error message
error
hello stdin
class NodeReaderError extends Error {
constructor(app, ...params) {
super(...params);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, NodeReaderError);
}
this.name = 'NodeReaderError';
this.app = app;
this.date = new Date()
}
}
try {
throw new NodeReaderError('Employee service', 'Database connection lost');
} catch (e) {
throw e;
}
/vlang-for-nodejs-developers/examples/customerror.js:17
throw e;
^
NodeReaderError: Database connection lost
at Object.<anonymous> (/vlang-for-nodejs-developers/examples/customerror.js:15:11)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47 {
app: 'Employee service',
date: 2022-08-30T05:50:24.471Z
}
import time
struct NodeReaderError {
Error
path string
}
fn (err NodeReaderError) msg() string {
return ' $time.now() : $err.path does not exist'
}
fn read_folder(path string) ? {
return IError(NodeReaderError{
path: path
})
}
fn main() {
read_folder('/files') or { panic(err) }
}
V panic: NodeReaderError: 2022-08-29 22:51:35 : /files does not exist
v hash: d75c62b
0 customerror 0x0000000108af40f8 main__main + 168
1 customerror 0x0000000108af51fc main + 76
2 customerror 0x0000000108ac0594 start + 52
3 ??? 0x0000000000000001 0x0 + 1
⬆ back to top <<<<<<< HEAD
const url = require('url');
const testUrl = url.parse('https://github.com/Thigidu/vlang-for-nodejs-developers#contents')
console.log(`Host: ${testUrl.hostname}`);
console.log(`Path: ${testUrl.pathname}`);
console.log(`Fragment: ${testUrl.hash}`);
Host: github.com
Path: /Thigidu/vlang-for-nodejs-developers
Fragment: #contents
import net.urllib
fn main() {
test_url := 'https://github.com/Thigidu/vlang-for-nodejs-developers#contents'
u := urllib.parse(test_url) or { panic('unable to parse') }
println('Host: $u.hostname()')
println('Path: $u.path')
println('Fragment: $u.fragment')
}
Host: github.com
Path: /Thigidu/vlang-for-nodejs-developers
Fragment: contents
V lang for nodejs developers
29
stars
28
commits
Jan 1, 2026
updated
Understanding vlang using node js examples
Vlang examples compared with NodeJs
Inspired by golang-for-nodejs-developers. Structure of the example is almost same as this repo.
buffers
streams
reading
writing
event emitter
regex
exec (sync)
exec (async)
tcp server
udp server
gzip
dns
crypto
sha256
env vars
cli args
cli flags
// single line comment
/**
* multi line comments
*/
// Single line comment.
/*
Multiline comment.
*/
console.log('Print log to console') // Stdout
var randomString = 'some random sting';
var someInt = 1;
console.log('Format printing example %s %d', randomString , someInt)
console.error('Print some error message') // Stderr
Print log to console
Format printing example some random sting 1
Print some error message
fn main(){
random_string := 'some random string'
some_int := 1
println('Prints a message in v with new line')
println('Format printing example $random_string $some_int')
eprintln('Print error message')
}
Prints a message in v with new line
Format printing example some random string 1
Print error message
console.log((new Date()).toISOString(), '-', 'Log message')
2022-08-14T02:27:36.509Z - Log message
import log
fn main() {
mut l := log.Log{
level: .info
output_target: .console
}
l.info('info message')
}
2022-08-14T05:30:40.117Z - info message
// function scoped
var x = 'Cat 🐈'
// block scoped
let y = 'Dog 🐕'
// constant
const z = 'Fox 🦊'
mut y := 'Dog 🐕'
y = 'Monkey 🐒'
println(y)
x := 'Cat 🐈'
// You can not assign a value to `x` again
// x = '10'
println(x)
Monkey 🐒
Cat 🐈
// 7 Primitive types
// string
const sampleString = 'Hello Tom'
console.log(typeof(sampleString))
// number
const count = 10
console.log(typeof(count))
// boolean
const isEnabled = false
console.log(typeof(isEnabled))
// null
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof#typeof_null
const salary = null
console.log(typeof(salary)); // It is object
// undefined
const isMale = undefined
console.log(typeof(isMale));
// symbol
const mySymbol = Symbol()
console.log(typeof(mySymbol));
// bigint
const myBigInt = 123242343343n
console.log(typeof(myBigInt));
string
number
boolean
object
undefined
symbol
bigint
// string
a := 'Sample string'
println(typeof(a).name)
//int
b := 10
println(typeof(b).name)
//bool
c := true
println(typeof(c).name)
// No null, no undefined data types
// Couldn't find anything related to javascript`s Symbol
big_int := i64(9999999999)
println(typeof(big_int).name)
string
int
bool
i64
const os = 'Mac'
const version = 13
const message = `You are using ${os} version ${version}`
console.log(message)
You are using Mac version 1
fn main() {
os := 'Mac'
version := 13
println('You are using $os version $version')
}
You are using Mac version 13
function check_os(os) {
if (os === 'mac') {
console.log('Use homebrew')
} else if (os === 'windows') {
console.log('Use .exe')
} else {
console.log('Support only for mac and windows')
}
}
check_os('mac')
check_os('Linux')
check_os('windows')
Use homebrew
Support only for mac and windows
Use .exe
fn check_os(os string) {
if os == 'mac' {
println('Use homebrew')
} else if os == 'windows' {
println('Use .exe')
} else {
println('Support only for mac and windows')
}
}
fn main() {
check_os('mac')
check_os('Linux')
check_os('windows')
}
Use homebrew
Support only for mac and windows
Use .exe
const colors = ['Red', 'Black', 'Blue', 'White', 'Pink']
for (let i in colors) {
console.log(colors[i]);
}
for (let i in colors) {
console.log(`Index ${i} ${colors[i]}`);
}
Red
Black
Blue
White
Pink
Index 0 Red
Index 1 Black
Index 2 Blue
Index 3 White
Index 4 Pink
fn main() {
colors := ['Red', 'Black', 'Blue', 'White', 'Pink']
for color in colors {
println(color)
}
for i, color in colors {
println('Index $i $color')
}
}
Red
Black
Blue
White
Pink
Index 0 Red
Index 1 Black
Index 2 Blue
Index 3 White
Index 4 Pink
let sum = 0
let i = 0
while (i <= 10) {
sum += i
i++
}
console.log(sum);
55
mut sum := 0
mut i := 0
for i <= 10 {
sum += i
i++
}
println(sum)
55
const value = 'Green'
switch (value) {
case 'Red':
console.log('Stop')
break
case 'Yellow':
console.log('Slowdown')
break
case 'Green':
console.log('Go..')
break
default:
console.log('Something wrong')
}
Go..
signal := 'Green'
match signal {
'Red' { println('Stop') }
'Yellow' { println('Slowdown') }
'Green' { println('Go..') }
else { println('Something wrong') }
}
Go..
let colors = ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
console.log(colors.length) // length of an array
console.log(colors[1]) // access element by index
colors.push('Orange') // append an element to an array
const colors_copy = [...colors] // copy of colors array.
console.log(colors_copy)
console.log(colors.sort()) // Sort an array
console.log(colors.pop()); // removes last element(Yellow) of an array and returns it
console.log(colors.includes('Yellow')) // false
5
Green
[ 'Red', 'Green', 'Yellow', 'Blue', 'Purple', 'Orange' ]
[ 'Blue', 'Green', 'Orange', 'Purple', 'Red', 'Yellow' ]
Yellow
false
fn main() {
mut colors := ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
println(colors.len)
println(colors[1])
colors << 'Orange'
colors_copy := colors.clone()
println(colors_copy)
colors.sort()
println(colors)
println(colors.pop())
println('Yellow' in colors)
}
5
Green
['Red', 'Green', 'Yellow', 'Blue', 'Purple', 'Orange']
['Blue', 'Green', 'Orange', 'Purple', 'Red', 'Yellow']
Yellow
false
let colors = ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
colors.forEach((color) => console.log(color))
let upper = colors.map((color) => color.toUpperCase())
console.log(upper);
let numbers = [1, 2, 3, 4, 5, 6]
even_numbers = numbers.filter(value => value % 2 == 0)
console.log(even_numbers);
let sum = numbers.reduce(
(previousValue, currentValue) => previousValue + currentValue, 0
);
console.log(sum);
Red
Green
Yellow
Blue
Purple
[ 'RED', 'GREEN', 'YELLOW', 'BLUE', 'PURPLE' ]
[ 2, 4, 6 ]
21
import arrays
fn main() {
mut colors := ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
for color in colors {
println(color)
}
upper := colors.map(fn (w string) string {
return w.to_upper()
})
println(upper)
numbers := [1, 2, 3, 4, 5, 6]
even_numbers := numbers.filter(it % 2 == 0)
println(even_numbers)
m := arrays.reduce(numbers, fn (t1 int, t2 int) int {
return t1 + t2
})?
println(m)
}
Red
Green
Yellow
Blue
Purple
['RED', 'GREEN', 'YELLOW', 'BLUE', 'PURPLE']
[2, 4, 6]
21
const employee_details = new Map()
employee_details.set('name', 'John')
employee_details.set('gender', 'Male')
// Iterate map
for (let [key, value] of employee_details) {
console.log(key, '->', value)
}
console.log(employee_details.has('gender'))
console.log(employee_details.get('gender'))
console.log(typeof (employee_details));
console.log(employee_details.get('bad_key'))
employee_details.delete('name')
console.log(employee_details);
name -> John
gender -> Male
true
Male
object
undefined
Map { 'gender' => 'Male' }
mut employee_details := {
'name': 'John'
'gender': 'Male'
}
for key, value in employee_details {
println('$key -> $value')
}
println('gender' in employee_details)
println(employee_details['gender'])
println(typeof(employee_details).name)
println('bad_key' in employee_details)
employee_details.delete('name')
println(employee_details)
name -> John
gender -> Male
true
Male
map[string]string
false
{'gender': 'Male'}
const employee = {
name: {
'firstname': 'Jack',
'lastname': 'Dane'
},
fullname: function () {
return `${this.name.firstname} ${this.name.lastname}`
}
}
let fullname = employee.fullname()
console.log(employee.name.firstname);
console.log(fullname);
Jack
Jack Dane
struct Name {
firstname string
lastname string
}
struct Employee {
Name
}
fn (name Name) fullname() string {
return '$name.firstname $name.lastname'
}
mut a := Employee{
firstname: 'Jack'
lastname: 'Dane'
}
println(a.firstname)
println(a.fullname())
Jack
Jack Dane
const os = require('os')
// function with out arguments
function get_os() {
return os.platform()
}
// function with argument
function get_string_len(s) {
return s.length
}
console.log(get_os())
console.log(get_string_len('Hello 🚀'))
darwin
8
import os
// function with out arguments
fn get_os() string {
return os.user_os()
}
// function with argument
fn get_string_len(s string) int {
return s.len
}
fn main() {
println(get_os())
println(get_string_len('Hello 🚀')) // Emoji holds 4
}
macos
10
function get_order({
food,
size = 'Medium'
}) {
return `${size} size ${food}`
}
order_1 = get_order({food: 'Pizza 🍕'})
order_2 = get_order({food: 'Beer 🍺', size: 'Large'})
console.log(order_1);
console.log(order_2);
Medium size Pizza 🍕
Large size Beer 🍺
// Need to use struct to set default params
struct Options {
food string
size string = 'Medium'
}
fn get_order(opt Options) string {
return '$opt.size size $opt.food'
}
fn main() {
order_1 := get_order(Options{
food: 'Pizza 🍕'
})
order_2 := get_order(Options{
food: 'Beer 🍺'
size: 'Large'
})
println(order_1)
println(order_2)
}
Medium size Pizza 🍕
Large size Beer 🍺
let person = {
age: 50,
name: 'Sam'
};
let { age, name } = person
console.log(age);
console.log(name);
50
Sam
struct Person {
age int
name string
}
fn main() {
person := Person{
age: 50
name: 'Sam'
}
age, name := person.age, person.name
println(age)
println(name)
}
50
Sam
let colors = ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
let morecolors = ['White', ...colors]
console.log(morecolors);
[ 'White', 'Red', 'Green', 'Yellow', 'Blue', 'Purple' ]
mut colors := ['Red', 'Green', 'Yellow', 'Blue', 'Purple']
mut morecolors := ['White']
// Not exactly equal to Javascript's spread
morecolors << colors
println(morecolors)
['White', 'Red', 'Green', 'Yellow', 'Blue', 'Purple']
// Variable arguments
function addition(...nums) {
let total = 0;
for (const num of nums){
total += num
}
return total
}
console.log(addition(1,2,3,4,5));
15
// Variable number of arguments
fn addition(nums ...int) int {
mut total := 0
for n in nums {
total += n
}
return total
}
fn main() {
println(addition(1, 2, 3, 4, 5))
}
15
let order1 = 'Salad 🥗 '
let order2 = 'Pizza 🍕'
console.log(`Wife ordered ${order1}, Husband ordered ${order2}`)
order2 = [order1, order1 = order2][0];
console.log(`They swapped and now Wife have ${order1}, husband have ${order2}`)
Wife ordered Salad 🥗 , Husband ordered Pizza 🍕
They swapped and now Wife have Pizza 🍕, husband have Salad 🥗
mut order1 := 'Salad 🥗'
mut order2 := 'Pizza 🍕'
println('Wife ordered $order1, Husband ordered $order2')
order1, order2 = order2, order1
println('They swapped and now Wife have $order1, husband have $order2')
Wife ordered Salad 🥗, Husband ordered Pizza 🍕
They swapped and now Wife have Pizza 🍕, husband have Salad 🥗
class Employee {
constructor(id) {
this.emp_id = id
this.name = 'John'
this.age = 0
this.salary = 100
}
setSalary(salary) {
return this.salary = salary
}
getEmail() {
return 'some@email'
}
}
const emp1 = new Employee(id = 100)
console.log(emp1.name)
console.log(emp1.salary);
emp1.setSalary(1000000)
console.log(emp1.salary);
console.log(emp1.getEmail());
John
100
1000000
some@email
[params]
struct EmployeeConfig {
id int
}
struct Employee {
mut:
emp_id int
name string = 'John'
age int
salary int = 100
}
fn (mut e Employee) set_salary(salary int) {
e.salary = salary
}
fn (e Employee) get_email() string {
return 'some@email'
}
fn get_emp(c EmployeeConfig) &Employee {
return &Employee{
emp_id: c.id
}
}
fn main() {
mut emp1 := get_emp(id: 100)
println(emp1.name)
println(emp1.salary)
emp1.set_salary(1_000_000)
println(emp1.salary)
email := emp1.get_email()
println(email)
}
John
100
1000000
some@email
Need help
// Current time
console.log(new Date().toLocaleString());
// Month names
const months = [...Array(12).keys()].map(key => new Date(0, key).toLocaleString('ta', { month: 'long' }))
console.log(months);
//Unix timestamp
console.log(Date.now());
let dateString = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
console.log(dateString);
const date1 = '2022-01-27';
const date2 = '2022-02-27';
const millis = new Date(date2) - new Date(date1)
const days = millis / (1000 * 60 * 60 * 24);
console.log(millis);
console.log(days);
8/20/2022, 8:16:47 PM
[
'January', 'February',
'March', 'April',
'May', 'June',
'July', 'August',
'September', 'October',
'November', 'December'
]
1661051807476
Aug 20, 2022
2678400000
31
import time
fn main() {
println(time.now())
println(time.long_months)
println(time.utc().unix_time_milli())
println(time.now().custom_format('MMM DD, YYYY'))
// Diff between two dates
mut date1 := '2022-01-27 00:00:00'
mut date2 := '2022-02-27 00:00:00'
// parse the date string to Time
pt1 := time.parse(date1)?
pt2 := time.parse(date2)?
// Subtract and divide by 24
millis := (pt2 - pt1).milliseconds() // hours between dates
days := millis / (1000 * 60 * 60 * 24)
println(millis)
println(int(days))
}
2022-08-20 20:19:22
['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
1661051962639
Aug 20, 2022
2678400000
31
setTimeout(process, 5000)
function process() {
console.log('Processing..')
}
Processing..
import sync
import time
fn process(mut wg sync.WaitGroup) {
defer {
wg.done()
}
println('Processing..')
time.sleep(5000 * time.millisecond)
}
fn main() {
mut wg := sync.new_waitgroup()
wg.add(1)
go process(mut wg)
wg.wait()
}
Processing..
const x = 'John';
(function (x) {
console.log('Hello', x)
})(x)
Hello John
fn main() {
// anonymous functions
fn (x string) {
println('Hello $x')
}('John')
}
Hello John
const fs = require('fs');
const readline = require('readline');
const path = require('path');
unix_time = Date.now()
const dir = __dirname;
const file_name = path.join(__dirname, 'file_sample.txt');
file_exist = fs.existsSync(file_name)
if (file_exist) {
console.log('file_sample.txt exist');
} else {
console.log('file_sample.txt not present');
}
let message = `${unix_time} - Log message \n`
fs.appendFile(file_name, message, function (err) {
if (err) throw err;
})
var line_reader = readline.createInterface({
input: require('fs').createReadStream(file_name)
});
line_reader.on('line', function (line) {
console.log(line);
});
fs.rm(file_name, function (err) {
if (err) throw err
})
file_sample.txt not present
1661261346709 - Log message
import os
import time
fn main() {
unix_time := time.now().unix_time_milli().str()
println(unix_time)
abs_path := os.abs_path('file_sample.txt')
// check if the file is present or not
file_exist := os.exists(abs_path)
if file_exist {
println('file_sample.txt exist')
} else {
println('file_sample.txt not present')
}
mut append_file := os.open_append(abs_path) or { panic(err) }
append_file.writeln('$unix_time - Log message')?
append_file.close()
mut read_file := os.open(abs_path)?
mut buf := []u8{len: 100}
for {
buf_read := read_file.read_bytes_into_newline(mut buf) or { panic(err) }
// convert bytes into string
s := buf#[..buf_read].bytestr()
if read_file.eof() {
break
}
println(s)
}
read_file.close()
os.rm(abs_path) or { panic(err) }
}
1661236319312
file_sample.txt not present
1661236319312 - Log message
let emplyee_1 = '{"name":"Yun", "id":87964, "email":"yun2020@someemail", "status":"active", "unused":"will be excluded"}'
let decode_emp = JSON.parse(emplyee_1)
console.log(decode_emp)
console.log(decode_emp.id)
console.log(decode_emp.name)
let encode_emp = JSON.stringify(decode_emp)
console.log(encode_emp);
{
name: 'Yun',
id: 87964,
email: 'yun2020@someemail',
status: 'active',
unused: 'will be excluded'
}
87964
Yun
{"name":"Yun","id":87964,"email":"yun2020@someemail","status":"active","unused":"will be excluded"}
import json
struct Emp {
name string
id int
email string
status string
}
fn main() {
emplyee_1 := '{"name":"Yun", "id":87964, "email":"yun2020@someemail", "status":"active", "unused":"will be excluded"}'
mut decode_emp := json.decode(Emp, emplyee_1) or {
println(err)
return
}
println(decode_emp)
println(decode_emp.id)
println(decode_emp.name)
mut encode_emp := json.encode(decode_emp)
println(encode_emp)
}
Emp{
name: 'Yun'
id: 87964
email: 'yun2020@someemail'
status: 'active'
}
87964
Yun
{"name":"Yun","id":87964,"email":"yun2020@someemail","status":"active"}
function task(value) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Completed')
}, 1e3)
})
}
(function () {
Promise.all([
task(1),
task(2),
task(3)
])
.then(result => console.log(result))
.catch(err => console.error(err))
})()
[ 'Completed', 'Completed', 'Completed' ]
import time
import rand
fn task(id int, duration int) string {
time.sleep(duration * time.millisecond)
println('task $id end')
return 'Task $id completed in $duration milliseconds'
}
fn main() {
mut threads := []thread string{}
threads << go task(1, rand.int_in_range(1000, 10000)?)
threads << go task(2, rand.int_in_range(1000, 10000)?)
threads << go task(3, rand.int_in_range(1000, 10000)?)
res := threads.wait()
println(res)
}
task 1 end
task 3 end
task 2 end
['Task 1 completed in 2131 milliseconds', 'Task 2 completed in 8710 milliseconds', 'Task 3 completed in 4047 milliseconds']
const actors = [{ name: "John", age: 18 }]
function actor_by_name(name) {
for (actor of actors) {
if (actor.name === name) {
return actor
}
}
throw Error(`Actor ${name} not exist`)
}
(function () {
try {
console.log(actor_by_name('John'))
console.log(actor_by_name('Angelina'))
} catch (e) {
console.log(e);
}
})()
{ name: 'John', age: 18 }
Error: Actor Angelina not exist
at actor_by_name (/Users/vlang-for-nodejs-developers/examples/trycatch.js:10:11)
at /Users/vlang-for-nodejs-developers/examples/trycatch.js:16:21
at Object.<anonymous> (/Users/vlang-for-nodejs-developers/examples/trycatch.js:21:3)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47
struct Actor {
name string
age int
}
struct List {
actors []Actor
}
fn (l List) by_name(name string) ?Actor {
for a in l.actors {
if a.name == name {
return a
}
}
return error('Employee $name not exist')
}
fn main() {
actor := List{
actors: [Actor{
name: 'John'
age: 18
}]
}
actor_details := actor.by_name('John') or { panic(err) }
println(actor_details)
actor_details2 := actor.by_name('Angelina') or { panic(err) }
println(actor_details2)
}
Actor{
name: 'John'
age: 18
}
V panic: Employee Angelina not exist
v hash: 3bc01d6
0 trycatch 0x000000010f7cf4cf main__main + 687
1 trycatch 0x000000010f7d01ac main + 76
2 trycatch 0x000000010f7a80b4 start + 52
3 ??? 0x0000000000000001 0x0 + 1
const http = require('http');
const server = http.createServer(function (req, res) {
var url = req.url;
if (url === '/version') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
data: 'node 16'
}));
} else {
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
error: 'Not found'
}));
}
})
server.listen(8080, function () {
console.log("Server running on 8080");
});
curl --get localhost:8080/version
{"data":"node 16"}
curl --get localhost:8080/unknowpath
{"error":"Not found"}
import vweb
struct App {
vweb.Context
}
['/version'; get]
pub fn (mut app App) get_version() vweb.Result {
return app.json({
'version': 'V 0.3'
})
}
fn main() {
vweb.run(&App{}, 8080)
}
curl --get localhost:8080/version
{"version":"V 0.3"}
curl --get localhost:8080/unknowpath
404 Not Found
//exportmodule.js
const crypto = require('crypto')
module.exports = {
get_random_num: () => Math.floor(Math.random() * 1000),
get_random_uuid: () => crypto.randomUUID()
}
// module.js
const random = require('./exportmodule')
console.log(random.get_random_num());
console.log(random.get_random_uuid());
616
079da02f-53e9-4d5c-b899-871c5d3081a1
//random/num.v
module random
import rand
// `pub` is similar to node`s module.exports
pub fn get_random_num() ?u32 {
return rand.u32_in_range(1,1000)
}
//random/uuid.v
module random
import rand
pub fn get_random_uuid() string{
return rand.uuid_v4()
}
// module.v
// import module called random which is inside random folder
import random
fn main() {
n := random.get_random_num() or { panic(err) }
println(n)
uuid := random.get_random_uuid()
println(uuid)
}
785
b00c215e-375e-4737-932f-62908f48a167
npm install packagenamenpm uninstall packagenamenpm publishv install packagenamev install --git https://github.com/vlang/markdownv remove packagenameconst fs = require("fs");
// Stdout
console.log('Hello')
process.stdout.write('Hello \n')
//stderr
console.error('Some error')
process.stderr.write('Some error \n')
// read from stdin
const data = fs.readFileSync(0, "utf-8");
console.log(data);
// run the command
echo hello stdin | node examples/stdout.js
Hello
Hello
Some error
Some error
hello stdin
import os
fn main() {
println('Hello from println')
mut o := os.stdout()
o.writeln('Hello')?
eprintln('Some error message')
mut e := os.stderr()
e.writeln('error')?
mut i := os.stdin()
mut d := i.read_bytes(100)
println(d.bytestr())
}
// run the command
echo hello stdin | v run examples/stdout.v
Hello from println
Hello
Some error message
error
hello stdin
class NodeReaderError extends Error {
constructor(app, ...params) {
super(...params);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, NodeReaderError);
}
this.name = 'NodeReaderError';
this.app = app;
this.date = new Date()
}
}
try {
throw new NodeReaderError('Employee service', 'Database connection lost');
} catch (e) {
throw e;
}
/vlang-for-nodejs-developers/examples/customerror.js:17
throw e;
^
NodeReaderError: Database connection lost
at Object.<anonymous> (/vlang-for-nodejs-developers/examples/customerror.js:15:11)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
at Module.load (node:internal/modules/cjs/loader:998:32)
at Module._load (node:internal/modules/cjs/loader:839:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47 {
app: 'Employee service',
date: 2022-08-30T05:50:24.471Z
}
import time
struct NodeReaderError {
Error
path string
}
fn (err NodeReaderError) msg() string {
return ' $time.now() : $err.path does not exist'
}
fn read_folder(path string) ? {
return IError(NodeReaderError{
path: path
})
}
fn main() {
read_folder('/files') or { panic(err) }
}
V panic: NodeReaderError: 2022-08-29 22:51:35 : /files does not exist
v hash: d75c62b
0 customerror 0x0000000108af40f8 main__main + 168
1 customerror 0x0000000108af51fc main + 76
2 customerror 0x0000000108ac0594 start + 52
3 ??? 0x0000000000000001 0x0 + 1
⬆ back to top <<<<<<< HEAD
const url = require('url');
const testUrl = url.parse('https://github.com/Thigidu/vlang-for-nodejs-developers#contents')
console.log(`Host: ${testUrl.hostname}`);
console.log(`Path: ${testUrl.pathname}`);
console.log(`Fragment: ${testUrl.hash}`);
Host: github.com
Path: /Thigidu/vlang-for-nodejs-developers
Fragment: #contents
import net.urllib
fn main() {
test_url := 'https://github.com/Thigidu/vlang-for-nodejs-developers#contents'
u := urllib.parse(test_url) or { panic('unable to parse') }
println('Host: $u.hostname()')
println('Path: $u.path')
println('Fragment: $u.fragment')
}
Host: github.com
Path: /Thigidu/vlang-for-nodejs-developers
Fragment: contents