Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
5 views

Go Systems Programming Master Linux and Unix system level programming with Go 1st Edition Mihalis Tsoukalos instant download

The document is a promotional overview of the book 'Go Systems Programming: Master Linux and Unix System Level Programming with Go' by Mihalis Tsoukalos, published by Packt Publishing. It includes links to various related programming books and resources, as well as information about the author and the book's content structure. The book covers topics such as Go programming, Unix systems programming, and advanced features of Go.

Uploaded by

skkbuclis
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

Go Systems Programming Master Linux and Unix system level programming with Go 1st Edition Mihalis Tsoukalos instant download

The document is a promotional overview of the book 'Go Systems Programming: Master Linux and Unix System Level Programming with Go' by Mihalis Tsoukalos, published by Packt Publishing. It includes links to various related programming books and resources, as well as information about the author and the book's content structure. The book covers topics such as Go programming, Unix systems programming, and advanced features of Go.

Uploaded by

skkbuclis
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 77

Go Systems Programming Master Linux and Unix

system level programming with Go 1st Edition


Mihalis Tsoukalos pdf download

https://ebookgate.com/product/go-systems-programming-master-
linux-and-unix-system-level-programming-with-go-1st-edition-
mihalis-tsoukalos/

Get Instant Ebook Downloads – Browse at https://ebookgate.com


Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

Linux system programming 1st Edition Robert Love

https://ebookgate.com/product/linux-system-programming-1st-edition-
robert-love/

ebookgate.com

Automating Linux and Unix System Administration 2nd


Edition Campi

https://ebookgate.com/product/automating-linux-and-unix-system-
administration-2nd-edition-campi/

ebookgate.com

UNIX systems programming communication concurrency and


threads 2nd printing Edition Kay A. Robbins

https://ebookgate.com/product/unix-systems-programming-communication-
concurrency-and-threads-2nd-printing-edition-kay-a-robbins/

ebookgate.com

Programming Linux Games 1st Edition Loki Software

https://ebookgate.com/product/programming-linux-games-1st-edition-
loki-software/

ebookgate.com
Professional Parallel Programming with C Master Parallel
Extensions with NET 4 1st Edition Gaston Hillar

https://ebookgate.com/product/professional-parallel-programming-with-
c-master-parallel-extensions-with-net-4-1st-edition-gaston-hillar/

ebookgate.com

Let s Go 3 Workbook Let s Go Third Edition Ritsuko Nakata

https://ebookgate.com/product/let-s-go-3-workbook-let-s-go-third-
edition-ritsuko-nakata/

ebookgate.com

Assembly Language Step by Step Programming with Linux 3rd


Edition Edition Jeff Duntemann

https://ebookgate.com/product/assembly-language-step-by-step-
programming-with-linux-3rd-edition-edition-jeff-duntemann/

ebookgate.com

Go Cookbook Build modular readable and testable


applications in Go 1ed Edition Aaron Torres

https://ebookgate.com/product/go-cookbook-build-modular-readable-and-
testable-applications-in-go-1ed-edition-aaron-torres/

ebookgate.com

Go Play Golf Read It Watch It Do It GO SERIES Gavin


Newsham

https://ebookgate.com/product/go-play-golf-read-it-watch-it-do-it-go-
series-gavin-newsham/

ebookgate.com
Go Systems Programming

Master Linux and Unix system level programming with Go

Mihalis Tsoukalos

BIRMINGHAM - MUMBAI
Go Systems Programming
Copyright © 2017 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or
transmitted in any form or by any means, without the prior written permission of the
publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the
information presented. However, the information contained in this book is sold without
warranty, either express or implied. Neither the author, nor Packt Publishing, and its
dealers and distributors will be held liable for any damages caused or alleged to be caused
directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the
companies and products mentioned in this book by the appropriate use of capitals.
However, Packt Publishing cannot guarantee the accuracy of this information.

First published: September 2017

Production reference: 1220917

Published by Packt Publishing Ltd.


Livery Place
35 Livery Street
Birmingham
B3 2PB, UK.
ISBN 978-1-78712-564-3

www.packtpub.com
Credits

Author Copy Editor


Mihalis Tsoukalos Tom Jacob

Reviewer Proofreader
Chris "mac" McEniry Safis Editing

Acquisition Editor Indexer


Frank Pohlmann Tejal Daruwale Soni

Project Editor Graphics


Radhika Atitkar Kirk D'Penha

Content Development Editor Production Coordinator


Monika Sangwan Arvindkumar Gupta

Technical Editor
Anupam Tiwari
About the Author
Mihalis Tsoukalos is a Unix administrator, programmer, DBA, and mathematician, who
enjoys writing technical books and articles and learning new things. He has written more
than 250 technical articles for many magazines including Sys Admin, MacTech, Linux User
and Developer, USENIX ;login:, Linux Format, and Linux Journal. His research interests include
databases, operating systems, Statistics, and machine learning.

You can reach him at http://www.mtsoukalos.eu/ and @mactsouk.

Mihalis is also a photographer (http://www.highiso.net/).

He is also the technical editor for MongoDB in Action, Second Edition, published by Manning.

I would like to thank all the magazines that I have written articles for because they gave me
the opportunity to improve my technical writing skills and finally write my first book!
I would also like to thank Agisilaos Ziotopoulos for telling me during a Skype call that
after writing so many magazine articles, I should write a book!
Lastly, I would like to thank the people at Packt Publishing for helping me write this book,
including Frank Pohlmann, my technical reviewer; Chris McEniry, for his really good
comments; and especially my editor, Radhika Atitkar for answering all my questions and
encouraging me during the whole process.
For all potential writers everywhere: if you wish to become a writer, start writing!
About the Reviewer
Chris "mac" McEniry has been a practicing systems administrator and engineer for over
twenty years. He regularly presents, writes tools, and works on improving how we
maintain systems.
www.PacktPub.com
For support files and downloads related to your book, please visit www.PacktPub.com. Did
you know that Packt offers eBook versions of every book published, with PDF and ePub
files available? You can upgrade to the eBook version at www.PacktPub.com and as a print
book customer, you are entitled to a discount on the eBook copy.

Get in touch with us at service@packtpub.com for more details. At www.PacktPub.com,


you can also read a collection of free technical articles, sign up for a range of free
newsletters and receive exclusive discounts and offers on Packt books and eBooks.

https://www.packtpub.com/mapt

Get the most in-demand software skills with Mapt. Mapt gives you full access to all Packt
books and video courses, as well as industry-leading tools to help you plan your personal
development and advance your career.

Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Customer Feedback
Thanks for purchasing this Packt book. At Packt, quality is at the heart of our editorial
process. To help us improve, please leave us an honest review on this book's Amazon page
at https://www.amazon.com/dp/1787125645.

If you'd like to join our team of regular reviewers, you can email us at
customerreviews@packtpub.com. We award our regular reviewers with free eBooks and
videos in exchange for their valuable feedback. Help us be relentless in improving our
products!
Table of Contents
Preface 1
Chapter 1: Getting Started with Go and Unix Systems Programming 9
The structure of the book 10
What is systems programming? 10
Learning systems programming 12
About Go 13
Getting ready for Go 14
Two useful Go tools 15
Advantages and disadvantages of Go 19
The various states of a Unix process 20
Exercises 22
Summary 22
Chapter 2: Writing Programs in Go 23
Compiling Go code 23
Checking the size of the executable file 26
Go environment variables 27
Using command-line arguments 29
Finding the sum of the command-line arguments 30
User input and output 33
Getting user input 33
Printing output 35
Go functions 35
Naming the return values of a Go function 36
Anonymous functions 36
Illustrating Go functions 36
The defer keyword 39
Using pointer variables in functions 42
Go data structures 43
Arrays 43
Slices 45
Maps 48
Converting an array into a map 50
Structures 51
Interfaces 53
Creating random numbers 56
Exercises 58
Summary 59
Chapter 3: Advanced Go Features 60
Error handling in Go 60
Functions can return error variables 61
About error logging 63
The addCLA.go program revisited 65
Pattern matching and regular expressions 66
Printing all the values from a given column of a line 68
Creating summaries 69
Finding the number of occurrences 71
Find and replace 73
Reflection 74
Calling C code from Go 76
Unsafe code 77
Comparing Go to other programming languages 78
Analysing software 80
Using the strace(1) command-line utility 80
The DTrace utility 83
Disabling System Integrity Protection on macOS 86
Unreachable code 86
Avoiding common Go mistakes 88
Exercises 88
Summary 89
Chapter 4: Go Packages, Algorithms, and Data Structures 90
About algorithms 91
The Big O notation 91
Sorting algorithms 92
The sort.Slice() function 92
Linked lists in Go 94
Trees in Go 98
Developing a hash table in Go 100
About Go packages 104
Using standard Go packages 104
Creating your own packages 105
Private variables and functions 107
The init() function 107
Using your own Go packages 108

[ ii ]
Using external Go packages 109
The go clean command 112
Garbage collection 112
Your environment 114
Go gets updated frequently! 116
Exercises 116
Summary 117
Chapter 5: Files and Directories 118
Useful Go packages 119
Command-line arguments revisited! 119
The flag package 119
Dealing with directories 122
About symbolic links 123
Implementing the pwd(1) command 124
Developing the which(1) utility in Go 126
Printing the permission bits of a file or directory 129
Dealing with files in Go 130
Deleting a file 130
Renaming and moving files 132
Developing find(1) in Go 134
Traversing a directory tree 135
Visiting directories only! 136
The first version of find(1) 137
Adding some command-line options 139
Excluding filenames from the find output 142
Excluding a file extension from the find output 144
Using regular expressions 145
Creating a copy of a directory structure 146
Exercises 151
Summary 151
Chapter 6: File Input and Output 152
About file input and output 153
Byte slices 153
About binary files 155
Useful I/O packages in Go 156
The io package 157
The bufio package 158
File I/O operations 160
Writing to files using fmt.Fprintf() 160

[ iii ]
About io.Writer and io.Reader 161
Finding out the third column of a line 163
Copying files in Go 166
There is more than one way to copy a file! 166
Copying text files 166
Using io.Copy 166
Reading a file all at once! 168
An even better file copy program 170
Benchmarking file copying operations 173
Developing wc(1) in Go 178
Counting words 178
The wc.go code! 178
Comparing the performance of wc.go and wc(1) 183
Reading a text file character by character 184
Doing some file editing! 186
Interprocess communication 188
Sparse files in Go 188
Reading and writing data records 191
File locking in Go 194
A simplified Go version of the dd utility 197
Exercises 200
Summary 200
Chapter 7: Working with System Files 201
Which files are considered system files? 202
Logging in Go 202
Putting data at the end of a file 202
Altering existing data 204
About log files 206
About logging 207
Logging facilities 207
Logging levels 207
The syslog Go package 208
Processing log files 210
File permissions revisited 214
Changing file permissions 216
Finding other kinds of information about files 218
More pattern matching examples 221
A simple pattern matching example 221
An advanced example of pattern matching 224
Renaming multiple files using regular expressions 227

[ iv ]
Searching files revisited 229
Finding the user ID of a user 229
Finding all the groups a user belongs to 231
Finding files that belong or do not belong to a given user 233
Finding files based on their permissions 236
Date and time operations 238
Playing with dates and times 238
Reformatting the times in a log file 240
Rotating log files 242
Creating good random passwords 245
Another Go update 247
Exercises 247
Summary 248
Chapter 8: Processes and Signals 249
About Unix processes and signals 250
Process management 250
About Unix signals 251
Unix signals in Go 252
The kill(1) command 252
A simple signal handler in Go 253
Handling three different signals! 255
Catching every signal that can be handled 257
Rotating log files revisited! 259
Improving file copying 262
Plotting data 266
Unix pipes in Go 273
Reading from standard input 274
Sending data to standard output 276
Implementing cat(1) in Go 277
The plotIP.go utility revisited 278
Unix sockets in Go 286
RPC in Go 287
Programming a Unix shell in Go 288
Yet another minor Go update 290
Exercises 290
Summary 291
Chapter 9: Goroutines – Basic Features 292
About goroutines 293

[v]
Concurrency and parallelism 293
The sync Go packages 294
A simple example 294
Creating multiple goroutines 295
Waiting for goroutines to finish their jobs 297
Creating a dynamic number of goroutines 299
About channels 301
Writing to a channel 301
Reading from a channel 303
Explaining h1s.go 304
Pipelines 305
A better version of wc.go 307
Calculating totals 310
Doing some benchmarking 314
Exercises 316
Summary 316
Chapter 10: Goroutines – Advanced Features 317
The Go scheduler 318
The sync Go package 318
The select keyword 318
Signal channels 321
Buffered channels 324
About timeouts 326
An alternative way to implement timeouts 328
Channels of channels 330
Nil channels 332
Shared memory 333
Using sync.Mutex 335
Using sync.RWMutex 339
The dWC.go utility revisited 342
Using a buffered channel 342
Using shared memory 345
More benchmarking 348
Detecting race conditions 349
About GOMAXPROCS 352
Exercises 354
Summary 354
Chapter 11: Writing Web Applications in Go 355
What is a web application? 356

[ vi ]
About the net/http Go package 356
Developing web clients 356
Fetching a single URL 356
Setting a timeout 358
Developing better web clients 360
A small web server 363
The http.ServeMux type 366
Using http.ServeMux 366
The html/template package 370
About JSON 375
Saving JSON data 376
Parsing JSON data 378
Using Marshal() and Unmarshal() 380
Using MongoDB 382
Basic MongoDB administration 382
Using the MongoDB Go driver 385
Creating a Go application that displays MongoDB data 388
Creating an application that displays MySQL data 392
A handy command-line utility 395
Exercises 399
Summary 400
Chapter 12: Network Programming 401
About network programming 402
About TCP/IP 402
About TCP 402
The TCP handshake! 403
About UDP and IP 403
About Wireshark and tshark 404
About the netcat utility 406
The net Go standard package 406
Unix sockets revisited 407
A Unix socket server 407
A Unix socket client 409
Performing DNS lookups 411
Using an IP address as input 412
Using a host name as input 413
Getting NS records for a domain 415
Developing a simple TCP server 416
Developing a simple TCP client 419

[ vii ]
Using other functions for the TCP server 421
Using alternative functions for the TCP client 423
Developing a simple UDP server 424
Developing a simple UDP client 426
A concurrent TCP server 428
Remote procedure call (RPC) 430
An RPC server 431
An RPC client 434
Exercises 436
Summary 437
Index 438

[ viii ]
Preface
Go Systems Programming is a book that will help you develop systems software using Go,
which is a systems programming language that started as an internal Google project before
becoming popular. What makes Go really popular is that it keeps the developer happy by
being easy to write, easy to read, easy to understand, and by having a compiler that is there
to help you. This book does not cover every possible aspect and feature of the Go
programming language—only the ones that are related to systems programming. Should
you wish to learn more about the Go programming language, you should wait from my
next book, Mastering Go, which will be ready in 2018!

The book you are about to read is an honest book in the sense that it will present working
Go code without overlooking its potential faults, its restrictions, and its logical gaffes, which
will allow you to improve it on your own and create a better version of it in the future.
What you will not be able to improve is the fundamental information that will be presented,
which is the basis of the way Unix systems work. I will consider the book to be successful if
it helps you understand what systems programming is about, why it is important, and how
you can start developing systems software in Go. I will be equally happy if Go becomes
your favorite programming language!

What this book covers


Chapter 1, Getting started with Go and Unix Systems Programming, starts by defining what
systems programming is before talking about the advantages and the disadvantages of Go,
the features of Go version 1.8, two handy Go tools named gofmt and godoc, as well as the
various states of Unix processes.

Chapter 2, Writing Programs in Go, helps you learn how to compile Go code and how to use
the environment variables that Go supports, and understand how Go reads the command
line arguments of a program. Then, we will talk about getting user input and output, which
are fundamental tasks, show you how to define functions in Go, where the defer keyword
is mentioned for the first time in this book and continue by discussing the data structures
that Go offers using handy code examples. In the remaining sections of the chapter, we will
discuss Go interfaces and random number generation. I am sure that you are going to enjoy
this chapter!
Preface

Chapter 3, Advanced Go Features, goes deeper and starts talking about some advanced Go
features, including error handling, which is critical when developing systems software and
error logging. Then it introduces you to pattern matching and regular expressions, Go
Reflection, and talks about unsafe code. After that, it compares Go to other programming
languages and presents two utilities, named dtrace(1) and strace(1), that allow you to
see what happens behind the scenes when you execute a program. Lastly, it talks about how
you can use the go tool to detect unreachable code and how to avoid some common Go
mistakes.

Chapter 4, Go Packages, Algorithms, and Data Structures, talks about algorithms and sorting
in Go and about the sort.Slice() function, which requires Go version 1.8 or newer. Then
it shows Go implementations of a linked list, a binary tree and a hash table. After that, it
discusses Go packages and teaches you how to create and use your own Go packages. The
last part of the chapter discusses Garbage collection in Go.

Chapter 5, Files and Directories, is the first chapter of this book that deals with a systems
programming topic, which is the handling of files, symbolic links, and directories. In this
chapter, you will find Go implementations of the core functionality of Unix tools such as
which(1), pwd(1), and find(1), but first you will learn how to use the flag package in
order to parse the command-line arguments and options of a Go program. Additionally,
you will learn how to delete, rename, and move files as well as how to traverse directory
structures the Go way. The last part of this chapter implements a utility that creates a copy
of all the directories of a directory structure!

Chapter 6, File Input and Output, shows you how to read the contents of a file, how to
change them, and how to write your own data to files! In this chapter, you will learn about
the io package, the io.Writer and io.Reader interfaces, and the bufio package that is
used for buffered input and output. You will also create Go versions of the cp(1), wc(1),
and dd(1) utilities. Lastly, you will learn about sparse files, how to create sparse files in Go,
how to read and write records from files, and how to lock files in Go.

Chapter 7, Working with System Files, teaches you how to deal with Unix system files, which
includes writing data to Unix log files, appending data to existing files, and altering the
data of text files. In this chapter, you will also learn about the log and log/syslog standard
Go packages, about Unix file permissions, and take your pattern matching and regular
expressions knowledge even further using practical examples. You will also learn about
finding the user ID of a user as well as the Unix groups a user belongs to. Lastly, you will
discover how to work with dates and times in Go using the time package and how to create
and rotate log files on your own.

[2]
Preface

Chapter 8, Processes and Signals, begins by discussing the handling of Unix signals in Go
with the help of the os/signal package by presenting three Go programs. Then it shows a
Go program that can rotate its log files using signals and signal handling and another Go
program that uses signals to present the progress of a file copy operation. This chapter will
also teach you how to plot data in Go and how to implement Unix pipes in Go. Then it will
implement the cat(1) utility in Go before briefly presenting the Go code of a Unix socket
client. The last section of the chapter quickly discusses how you can program a Unix shell in
Go.

Chapter 9, Goroutines – Basic Features, discusses a very important Go topic, which is


goroutines, by talking about how you can create goroutines and how you can synchronize
them and wait for them to finish before ending a program. Then it talks about channels and
pipelines, which help goroutines communicate and exchange data in a safe way. The last
part of the chapter presents a version of the wc(1) utility that is implemented using
goroutines. However, as goroutines is a big subject, the next chapter will continue talking
about them.

Chapter 10, Goroutines – Advanced Features, talks about more advanced topics related to
goroutines and channels, including buffered channels, signal channels, nil channels,
channels of channels, timeouts, and the select keyword. Then it discusses issues related to
shared memory and mutexes before presenting two more Go versions of the wc(1) utility
that use channels and shared memory. Lastly, this chapter will talk about race conditions
and the GOMAXPROCS environment variable.

Chapter 11, Writing Web Applications in Go, talks about developing web applications and
web servers and clients in Go. Additionally, it talks about communicating with MongoDB
and MySQL databases using Go code. Then, it illustrates how to use the html/template
package, which is part of the Go standard library and allows you to generate HTML output
using Go HTML template files. Lastly, it talks about reading and writing JSON data before
presenting a utility that reads a number of web pages and returns the number of times a
given keyword was found in those web pages.

Chapter 12, Network Programming, discusses topics related to TCP/IP and its protocols using
the net Go standard package. It shows you how to create TCP and UDP clients and servers,
how to perform various types of DNS lookups, and how to use Wireshark to inspect
network traffic. Additionally, it talks about developing RPC clients and servers in Go as
well as developing a Unix socket server and a Unix socket client.

As you will see, at the end of each chapter there are some exercises for you to do in order to
gain more information about important Go packages and write your own Go programs.
Please, try to do all the exercises of this book.

[3]
Preface

What you need for this book


This book requires a computer running a Unix variant with a relatively recent Go version,
which includes any machine running Mac OS X, macOS, or Linux.

Apple used to call its operating system as Mac OS X followed by the version number;
however, after Mac OS X 10.11 (El Capitan), Apple changed that, and Mac OS X 10.12 is
now called macOS 10.12 (Sierra) – in this book, the terms Mac OS X and macOS are used
interchangeably. Additionally, there is a big chance that by the time you read this book, the
latest version of macOS will be macOS 10.13 (High Sierra). You can learn more about the
various versions of macOS by visiting https://en.wikipedia.org/wiki/MacOS.

All of the Go code in this book has been tested with Go 1.8.x running on a iMac using
macOS 10.12 Sierra and with Go version 1.3.3 running on a Debian Linux machine. Most of
the code can run on both Go versions without any code changes. However, when newer Go
features are used, the code will fail to compile with Go 1.3.3—the book states the Go
programs that will not compile with Go version 1.3.3 or require Go version 1.8 or newer.

Please note that at the time of writing this text, the latest Go version is 1.9. Given the way
Go works, you will be able to compile all the Go code of this book in newer Go versions
without any changes.

Who this book is for


This book is for Unix users, power Unix users, Unix system administrators, and Unix
system developers that use Go on one or more Unix variants and want to start developing
systems software using the Go programming language.

Although this book might not be the best choice for people that do not feel comfortable with
the Unix operating system or for people who have no previous programming experience,
amateur programmers will find lots of practical information about Unix that might inspire
them to start developing their own system utilities.

Conventions
In this book, you will find a number of text styles that distinguish between different kinds
of information. Here are some examples of these styles and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions,
pathnames, dummy URLs, user input, and Twitter handles are shown as follows: "This is
because the main() function is where the program execution begins."

[4]
Preface

A block of code is set as follows:


package main

import "fmt"
import "os"

func main() {
arguments := os.Args
for i := 0; i < len(arguments); i++ {
fmt.Println(arguments[i])
}
}

When we wish to draw your attention to a particular part of a code block, the relevant lines
or items are set in bold:
package main

import "fmt"
import "os"

func main() {
arguments := os.Args
for i := 0; i < len(arguments); i++ {
fmt.Println(arguments[i])
}
}

Any command-line input or output is written as follows:


$ go run hw.go
Hello World!

New terms and important words are shown in bold.

Warnings or important notes appear like this.

Tips and tricks appear like this.

[5]
Preface

Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this
book-what you liked or disliked. Reader feedback is important for us as it helps us develop
titles that you will really get the most out of. To send us general feedback, simply email
feedback@packtpub.com, and mention the book's title in the subject of your message. If
there is a topic that you have expertise in and you are interested in either writing or
contributing to a book, see our author guide at www.packtpub.com/authors.

Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you
to get the most from your purchase.

Downloading the example code


You can download the example code files for this book from your account at
http://www.packtpub.com. If you purchased this book elsewhere, you can visit
http://www.packtpub.com/support and register to have the files emailed directly to you.
You can download the code files by following these steps:

1. Log in or register to our website using your email address and password.
2. Hover the mouse pointer on the SUPPORT tab at the top.
3. Click on Code Downloads & Errata.
4. Enter the name of the book in the Search box.
5. Select the book for which you're looking to download the code files.
6. Choose from the drop-down menu where you purchased this book from.
7. Click on Code Download.

Once the file is downloaded, please make sure that you unzip or extract the folder using the
latest version of:

WinRAR / 7-Zip for Windows


Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux

[6]
Preface

The code bundle for the book is also hosted on GitHub at


https://github.com/PacktPublishing/Go-Systems-Programming. We also have other code
bundles from our rich catalog of books and videos available at
https://github.com/PacktPublishing/. Check them out!

Downloading the color images of this book


We also provide you with a PDF file that has color images of the screenshots/diagrams used
in this book. The color images will help you better understand the changes in the output.
You can download this file from
https://www.packtpub.com/sites/default/files/downloads/GoSystemsProgramming_Col
orImages.pdf.

Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do
happen. If you find a mistake in one of our books-maybe a mistake in the text or the code-
we would be grateful if you could report this to us. By doing so, you can save other readers
from frustration and help us improve subsequent versions of this book. If you find any
errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting
your book, clicking on the Errata Submission Form link, and entering the details of your
errata. Once your errata are verified, your submission will be accepted and the errata will
be uploaded to our website or added to any list of existing errata under the Errata section of
that title. To view the previously submitted errata, go to
https://www.packtpub.com/books/content/support and enter the name of the book in the
search field. The required information will appear under the Errata section.

Piracy
Piracy of copyrighted material on the internet is an ongoing problem across all media. At
Packt, we take the protection of our copyright and licenses very seriously. If you come
across any illegal copies of our works in any form on the internet, please provide us with
the location address or website name immediately so that we can pursue a remedy. Please
contact us at copyright@packtpub.com with a link to the suspected pirated material. We
appreciate your help in protecting our authors and our ability to bring you valuable
content.

[7]
Preface

Questions
If you have a problem with any aspect of this book, you can contact us at
questions@packtpub.com, and we will do our best to address the problem.

[8]
Getting Started with Go and
1
Unix Systems Programming
An operating system is the kind of software that allows you to communicate with the
hardware, which means that you cannot use your hardware without an operating system.
Unix is an operating system with many variants that have many things in common
including their programming interface.

The Unix operating system was mainly programmed in C and not entirely in the assembly
language, which makes it portable to other computer architectures without having to
rewrite everything from scratch. It is important to understand that even if you are
developing a Go program on a Unix machine, at the end of the day, your code will be
translated to C functions and system calls because this is the only way to directly
communicate with the Unix kernel. The main benefits you get from writing Go code instead
of C code are smaller programs with less silly bugs. You will learn more about this in
Chapter 3, Advanced Go Features.

As this book will use Go, you will need to have a version of Go installed on your Unix
machine. The good news is that there is a port of the Go programming language for almost
all modern Unix systems including macOS, Linux, and FreeBSD. There is also a Windows
port of Go, but this book will not deal with Microsoft Windows.

Although there is a good chance that your Unix variant has a package for Go, you can also
get Go from https://golang.org/dl/.
Getting Started with Go and Unix Systems Programming

In this chapter, you will learn the following topics:

Systems programming
The advantages and disadvantages of Go
The states of a Unix process
Two Go tools: gofmt and godoc
The features of the latest Go version (1.8)

The structure of the book


This book has three parts. The first part, which includes this chapter, is about Go and the Go
features that can be handy when developing systems software—this does not mean that you
should use all of them when developing your programs. The second part is all about
programming with files, directories, and processes, which is the most common type of
systems software. The third part explores goroutines, web applications, and network
programming in Go, which is the most advanced type of systems software. The good thing
is that you do not need to read the third part of the book right away.

What is systems programming?


Systems programming is a special area of programming on Unix machines. Note that
systems programming is not limited to Unix machines—it is just that this book deals with
the Unix operating system only. Most commands that have to do with system
administration tasks, such as disk formatting, network interface configuration, module
loading, and kernel performance tracking, are implemented using the techniques of systems
programming. Additionally, the /etc directory, which can be found on all Unix systems,
contains plain text files that deal with the configuration of a Unix machine and its services
and are also manipulated using systems software.

You can group the various areas of systems software and related system calls in the
following sets:

File I/O: This area deals with file reading and writing operations, which is the
most important task of an operating system. File input and output must be fast
and efficient, and above all, reliable.
Advanced file I/O: Apart from the basic input and output system calls, there are
also more advanced ways to read or write to a file including asynchronous I/O
and non-blocking I/O.

[ 10 ]
Getting Started with Go and Unix Systems Programming

System files and configuration: This group of system software includes


functions that allow you to handle system files, such as /etc/passwd, and get
system specific information, such as system time and DNS configuration.
Files and directories: This cluster includes functions and system calls that allow
the programmer to create and delete directories and get information such as the
owner and the permissions of a file or a directory.
Process control: This group of software allows you to create and interact with
Unix processes.
Threads: When a process has multiple threads, it can perform multiple tasks.
However, threads must be created, terminated, and synchronized, which is the
purpose of this collection of functions and system calls.
Server processes: This set includes techniques that allow you to develop server
processes, which are processes that get executed in the background without the
need for an active terminal. Go is not that good at writing server processes in the
traditional Unix way—but let me explain this a little more. Unix servers such as
Apache use fork(2) to create one or more child processes (this process is called
forking and refers to cloning the parent process into a child process) and
continue executing the same executable from the same point, and most
importantly, sharing memory. Although Go does not offer an equivalent to the
fork(2) function, this is not an issue because you can use goroutines to cover
most of the uses of fork(2).
Interprocess communication: This set of functions allows processes that run on
the same Unix machine to communicate with each other using features such as
pipes, FIFOs, message queues, semaphores, and shared memory.
Signal processing: Signals offer processes a way of handling asynchronous
events, which can be very handy. Almost all server processes have extra code that
allows them to handle Unix signals using the system calls of this group.
Network programming: This is the art of developing applications that work over
computer networks with the help of TCP/IP and is not systems programming per
se. However, most TCP/IP servers and clients are dealing with system resources,
users, files, and directories. So, most of the time, you cannot create network
applications without doing some kind of systems programming.

The challenging thing with systems programming is that you cannot afford to have an
incomplete program; you can either have a fully working, secure program that can be used
on a production system or nothing at all. This mainly happens because you cannot trust end
users and hackers. The key difficulty in systems programming is the fact that an erroneous
system call can make your Unix machine misbehave or, even worse, crash!

[ 11 ]
Getting Started with Go and Unix Systems Programming

Most security issues on Unix systems usually come from wrongly implemented systems
software because bugs in systems software can compromise the security of an entire system.
The worst part is that this can happen many years after using a certain piece of software.

When writing systems software, you should take good care of both error
messages and warnings because they are the friends that help you
understand what is going on and why your program did not behave as
expected. Putting it simply, there is a big difference between the File not
found and Not enough permissions to read file error messages.

Back when Unix was first introduced, the only way to write systems software was using C;
nowadays, you can program systems software using programming languages including Go,
which will be the subject of this book.

You should understand that the two main benefits you get from using a programming
language other than C for developing systems software are as follows:

Using a modern programming language along with its tools


Simplicity, as you usually have to write, debug, and maintain less code

Apart from Go, other good candidates for developing system tools are Python, Perl, Rust,
and Ruby.

Learning systems programming


The only way you can learn systems programming is by developing your own utilities
using this book as a reference and a tutorial. At first, you will make a large amount of
ridiculous mistakes, but as you get better, you will make a smaller amount of much more
clever and hard to debug mistakes! However, it is fine to try new things when learning. In
fact, it is necessary to try new things and fail because this means that you are really learning
something new. Just make sure that you do not use a production web server for learning
systems programming.

If you have difficulties finding out what to develop, you can start by creating your own
versions of some of the existing Unix command line utilities such as ls(1), mkdir(1),
ln(1), wc(1), and which(1). You do not have to create a fully featured version of each
one of them with support for all command-line options; what is important is to develop a
stable and secure version that implements the main functionality and works without
problems.

[ 12 ]
Getting Started with Go and Unix Systems Programming

The best book that can teach you Unix systems programming in C is
Advanced Unix Programming in the Unix Environment by W. Richard Stevens.
Its third edition is available now, but all its editions are useful and contain
a plethora of valuable details.

About Go
Go is a modern generic purpose open source programming language that was officially
announced at the end of 2009. It began as an internal Google project and has been inspired
by many other programming languages including C, Pascal, Alef, and Oberon. Its spiritual
fathers are Robert Griesemer, Ken Thomson, and Rob Pike, who designed Go as a language for
professional programmers who want to build reliable and robust software. Apart from its
syntax and standard functions, Go comes with a pretty rich standard library.

At the time of writing this book, the latest stable Go version is 1.8, which includes some
handy new features including the following—feel free to skip this if you have not used Go
before:

New conversion rules exist that allow you to easily convert between types that
are almost equal provided that some criteria are met. You can fix the import
paths of the golang.org/x/net/name form to just the name of the Go source
file using the go tool command without having to open the source files
yourselves.
The operation of the tool is stricter in some cases and looser in cases that used to
generate false positives.
There is now a default value for GOPATH Environment Variables when
GOPATH is undefined. For Unix systems, the default value is $HOME/go.
There are various improvements to the Go runtime that speed up Go.
There is a sort.slice() function that allows you to sort a slice by providing a
comparator callback instead of implementing sort.Interface.
There is now a Shutdown method to http.Server.
There exist various small changes to the database/sql package that give the
developer more control over queries.
You can create bugs using the go bug command.

[ 13 ]
Getting Started with Go and Unix Systems Programming

Getting ready for Go


You can easily find your version of Go using this command:
$ go version
go version go1.7.5 darwin/amd64

The previous output is from a macOS machine hence the darwin string. A Linux machine
would give the following kind of output:
$ go version
go version go1.3.3 linux/amd64

You will learn more about go tool, which you will use all the time, in the next chapters.

As I can imagine, you must be impatient to see some Go code; so here is the Go version of
the famous Hello World program:
package main

import "fmt"

// This is a demonstrative comment!


func main() {
fmt.Println("Hello World!")
}

If you are familiar with C or C++, you will find Go code pretty easy to understand. Each file
that contains Go code begins with a package declaration followed by the needed import
declarations. The package declaration shows the package that this file belongs to. Note that
semicolons are not required for successfully terminating a Go statement unless you want to
put two or more Go statements in the same line.

In Chapter 2, Writing Programs in Go, you will find out how to compile and execute Go
code. For now, it is enough to remember that Go source files are stored using the .go file
extension—your task is to choose a descriptive filename.

When searching for Go-related information, use Golang or golang as the


keyword for the Go programming language because the word Go can be
found almost everywhere in the English language and it will not help your
search!

[ 14 ]
Getting Started with Go and Unix Systems Programming

Two useful Go tools


The Go distribution comes with a plethora of tools that can make your life as a programmer
easier. The two most useful of them are gofmt and godoc.

Note that go tool itself can also invoke various tools—you can see a list
of them by executing go tool.

The gofmt utility formats Go programs in a given way, which is really important when
different people are going to work with the same code for a big project. You can find more
information about gofmt at https://golang.org/cmd/gofmt/.

The following is a poorly formatted version of the hw.go program that is hard to read and
understand:
$ cat unglyHW.go
package main
import
"fmt"
// This is a demonstrative comment!
func main() {
fmt.Println("Hello World!")
}

Processing the previous code, which is saved as unglyHW.go with gofmt, generates the
following easy to read and comprehend output:
$ gofmt unglyHW.go
package main
import "fmt"
// This is a demonstrative comment!
func main() {
fmt.Println("Hello World!")
}

Remembering that the gofmt utility does not automatically save the generated output is
important, which means that you should either use the -w option followed by a valid
filename or redirect the output of gofmt to a new file.

The godoc utility allows you to see the documentation of existing Go packages and
functions. You can find more information about godoc at
http://godoc.org/golang.org/x/tools/cmd/godoc.

[ 15 ]
Getting Started with Go and Unix Systems Programming

You are going to use godoc a lot as it is a great tool for learning the details
of Go functions.

The following screenshot shows the output of the godoc command generated on a Terminal
when asked for information about the Println() function of the fmt package:

The output of the godoc command

[ 16 ]
Getting Started with Go and Unix Systems Programming

Another handy feature of godoc is that it can start its own web server and allow you to see
its documentation using a web browser:
$ godoc -http=:8080

The following screenshot shows the kind of output you get on a web browser after visiting
http://localhost:8080/pkg/ while the previous command is running. You can use any
port number you want, provided that it is not already in use:

Using the godoc utility from your web browser

[ 17 ]
Getting Started with Go and Unix Systems Programming

The most important tool for a programmer is the editor they use for writing the source
code. When I am on a Mac, I typically use the TextMate editor, but when I am on a different
Unix machine, I prefer vi. Choosing an editor is not an easy task because you are going to
spend a lot of time with it. However, any text editor will do the job as long as it does not put
any control characters inside the source code files. The following screenshot shows the
TextMate editor in action:

The TextMate editor showing the look of a some Go code

[ 18 ]
Getting Started with Go and Unix Systems Programming

Advantages and disadvantages of Go


Go is not perfect but it has some very interesting features. The list of the Go strong features
includes the following:

Go code is easy to read and easy to understand.


Go wants happy developers because a happy developer writes better code!
The Go compiler prints practical warning and error messages that help you solve
the actual problem. Putting it simply, the Go compiler is there to help you, not to
make your life difficult!
Go code is portable.
Go is a modern programming language.
Go has support for procedural, concurrent, and distributed programming.
Go supports Garbage Collection (GC) so you do not have to deal with memory
allocation and deallocation. However, GC might slow down your programs a
little.
Go does not have a preprocessor and does high-speed compilation.
Consequently, Go can be used as a scripting language.
Go can build web applications. Building a web application in C is simply not very
efficient unless you use a nonstandard external library. Additionally, Go provides
programmers with a simple web server for testing purposes.
The standard Go library offers many packages that simplify the work of the
programmer. Additionally, the methods found in the standard Go library are
tested and debugged in advance, which means that most of the time they contain
no bugs.
Go uses static linking by default, which means that the produced binary files can
be easily transferred to other machines with the same OS. Consequently, the
developer does not need to worry about libraries, dependencies, and different
library versions.
You will not need a GUI for developing, debugging, and testing Go applications
as Go can be used from the command line.
Go supports Unicode. This means that you do not need any extra code to print
characters from multiple human languages.
Go keeps concepts orthogonal because a few orthogonal features work better
than many overlapping ones.

[ 19 ]
Getting Started with Go and Unix Systems Programming

The list of Go disadvantages includes the following:

Well, Go is not C, which means that you or your team should learn a new
programming language to develop systems software.
Go does not have direct support for object-oriented programming, which can be a
problem for programmers that are used to writing code in an object-oriented
manner. Nevertheless, you can use composition in Go to mimic inheritance.
Back when Unix was first introduced, C was the only programming language for
writing systems software. Nowadays, you can also use Rust, C++, and Swift for
writing systems software, which means that not everybody will be using Go.
C is still faster than any other programming language for systems programming
mainly because Unix is written in C.

Despite the advantages or the disadvantages of a programming language,


you have the final word on whether you like it or not. The important thing
is that you choose a programming language that you like and can do the
job you want! Personally, I do not like C++ despite the fact that it is a very
capable programming language and I have written an FTP client in C++!
Additionally, I never liked Java. There is no right or wrong thing in
personal tastes so do not feel guilty about your choices.

The various states of a Unix process


Strictly speaking, a process is an execution environment that contains instructions, user-
data and system-data parts, and other kinds of resources that are obtained during runtime.
A program is a file that contains instructions and data, which are used for initializing the
instruction and user-data parts of a process.

Back when the Unix operating system was first introduced, computers had single CPUs
without multiple cores and a small amount of RAM. However, Unix was a multiuser and
multitasking operating system. In order to actually be a multiuser and do multitasking, it
had to be able to run each individual process sporadically, which means that a process
should have multiple states. The following figure shows the possible states of a process as
well as the right path to go from one state to another:

[ 20 ]
Getting Started with Go and Unix Systems Programming

The states of a Unix process

There are three categories of processes: user processes, Kernel processes, and Daemon
processes:

User processes run in user space and usually have no special access rights
Kernel processes are being executed in kernel space only and can fully access all
kernel data structures
Daemon processes are programs that can be found in the user space and run in
the background without the need for a Terminal

Realizing that you cannot control the state of a process is really important, as this is the job
of the scheduler of the operating system that runs in the kernel. Putting it simply, you
cannot tell when the state of a process is going to change or when the process is going to go
into the running state, so your code cannot count on any such assumptions!

The C way for creating new processes involves the calling of the fork()
system call. The return value of fork() allows the programmer to
differentiate between the parent and child processes. However, Go does
not support a similar functionality.

[ 21 ]
Getting Started with Go and Unix Systems Programming

Exercises
1. Visit the Go website: https://golang.org/.
2. Install Go on your system and find out its version.
3. Type the code of the Hello World program on your own and save it to a file.
4. If you are on a Mac, download TextMate from http://macromates.com/.
5. If you are on a Mac, download the TextWrangler editor from
http://www.barebones.com/products/TextWrangler/ and try it.
6. Try to learn vi or Emacs on your own if you are not already familiar with another
Unix text editor.
7. Look at any Go code you can find and try to make small changes to it.

Summary
In this chapter, you learned how to get Go on your computer, the features of the latest Go
version, the advantages and disadvantages of Go, and the gofmt and godoc Go tools, as
well as some important things about the Unix operating system.

The next chapter will not only tell you how to compile your Go code but it will also discuss
other important Go topics such as reading and using command-line arguments,
environment variables, writing functions, data structures, interfaces, getting user input, and
printing output.

[ 22 ]
Writing Programs in Go
2
This chapter will talk about many essential, interesting, and handy Go topics that will help
you be more productive. I think it would be a good idea to start this chapter by compiling
and running the Go code of the hw.go program from the previous chapter. Then, you will
learn how to deal with the environment variables that can be used by Go, how to process
the command-line arguments of a Go program, and how to print the output on the screen
and get input from the user. Finally, you will see how to define functions in Go, learn about
the extremely important defer keyword, look at the data structures that come with Go, and
learn what Go interfaces are before checking out code that generates random numbers.

Therefore, in this chapter, you will become familiar with many Go concepts, including the
following:

Compiling your Go programs


Go environment variables
Using the command-line arguments given to a Go program
Getting user input and printing the output on your screen
Go functions and the defer keyword
Go data structures and interfaces
Creating random numbers

Compiling Go code
Go does not care about the name of the source file of an autonomous program as long as the
package name is main and there is a main() function in it. This is because the main()
function is where the program execution begins. This also means that you cannot have
multiple main() functions in the files of a single project.
Writing Programs in Go

There exist two ways to run a Go program:

The first one, go run, just executes the Go code without generating any new
files, only some temporary ones that are deleted afterward
The second way, go build, compiles the code, generates an executable file, and
waits for you to run the executable file

This book is written on an Apple Mac OS Sierra system using the Homebrew (https:/​/
brew.​sh/​) version of Go. However, you should have no difficulties compiling and running
the presented Go code on most Linux and FreeBSD systems, provided that you have a
relatively recent version of Go.

So, the first way is as follows:


$ go run hw.go
Hello World!

The aforementioned way allows Go to be used as a scripting language. The following is the
second way:
$ go build hw.go
$ file hw
hw: Mach-O 64-bit executable x86_64

The generated executable file is named after the name of the Go source file, which is much
better than a.out, which is the default filename of the executable files generated by the C
compiler.

If there is an error in your code, such as a misspelled Go package name when calling a Go
function, you will get the following kind of error message:
$ go run hw.go
# command-line-arguments
./hw.go:3: imported and not used: "fmt"
./hw.go:7: undefined: mt in mt.Println

If you accidentally misspell the main() function, you will get the following error message
because the execution of an autonomous Go program begins from the main() function:
$ go run hw.go
# command-line-arguments
runtime.main_main f: relocation target main.main not defined
runtime.main_main f: undefined: "main.main"

[ 24 ]
Writing Programs in Go

Lastly, I want to show you an error message that will give you a good idea about a
formatting rule of Go:
$ cat hw.gocat
package main
import "fmt"
func main()
{
fmt.Println("Hello World!")
}
$ go run hw.go
# command-line-arguments
./hw.go:6: syntax error: unexpected semicolon or newline before {

The previous error message shows us that Go prefers putting curly braces in a certain way,
which is not the case with most programming languages such as Perl, C, and C++. This
might look frustrating at first, but it saves you from one extra line of code and makes your
programs more readable. Note that the preceding code uses the Allman formatting style,
which Go does not accept.

The official explanation for this error is that Go requires the use of semicolons as statement
terminators in many contexts, and the compiler automatically inserts the required
semicolons when it thinks they are necessary, which in this case is at the end of a non-blank
line. Therefore, putting the opening brace ({) on its own line will make the Go compiler to
put a semicolon at the end of the previous line, which produces the error message.

If you think that the gofmt tool can save you from similar errors, you will be disappointed:
$ gofmt hw.go
hw.go:6:1: expected declaration, found '{'

The Go compiler has another rule, as you can see in the following output:
$ go run afile.go
# command-line-arguments
./afile.go:4: imported and not used: "net"

This means that you should not import packages without actually using them in your
programs. Although this could have been a harmless warning message, your Go program
will not get compiled. Bear in mind that similar warnings and error messages are a good
indication that you are missing something, and you should try to correct them. You will
create a higher quality of code if you treat warnings and errors the same.

[ 25 ]
Writing Programs in Go

Checking the size of the executable file


So, after successfully compiling hw.go, you might want to check the size of the generated
executable file:
$ ls -l hw
-rwxr-xr-x 1 mtsouk staff 1628192 Feb 9 22:29 hw
$ file hw
hw: Mach-O 64-bit executable x86_64

Compiling the same Go program on a Linux machine will create the following file:
$ go versiongo
go version go1.3.3 linux/amd64
$ go build hw.go
$ ls -l hw
-rwxr-xr-x 1 mtsouk mtsouk 1823712 Feb 18 17:35 hw
$ file hw
hw: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked,
not stripped

To get a better sense of how big the Go executable is, consider that the
executable for the same program written in C is about 8432 bytes!

So, you might ask why such a huge executable file for such a small program? The main
reason is that Go executable files are statically build, which means that they require no
external libraries to run. The use of the strip(1) command can make the generated
executable files a little smaller, but do not expect miracles:
$ strip hw
$ ls -l hw
-rwxr-xr-x 1 mtsouk staff 1540096 Feb 18 17:41 hw

[ 26 ]
Writing Programs in Go

The previous process has nothing to do with Go itself because strip(1) is a Unix
command that removes or modifies the symbol table of files and therefore reduces their
size. Go can perform the work of the strip(1) command on its own and create smaller
executable files, but this method does not always work:
$ ls -l hw
-rwxr-xr-x 1 mtsouk mtsouk 1823712 Feb 18 17:35 hw
$ CGO_ENABLED=0 go build -ldflags "-s" -a hw.go
$ ls -l hw
-rwxr-xr-x 1 mtsouk mtsouk 1328032 Feb 18 17:44 hw
$ file hw
hw: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked,
stripped

The preceding output is from a Linux machine; when the same compilation command is
used on a macOS machine, it will make no difference to the size of the executable file.

Go environment variables
The go tool can use many Unix shell environment variables dedicated to Go, including
GOROOT, GOHOME, GOBIN, and GOPATH. The most important Go environment variable is
GOPATH, which specifies the location of your workspace. Usually, this is the only
environment variable that you will need to define when developing Go code; it is to do with
the way the files of a project will be organized. This means that each project will be
organized into three main directories, named src, pkg, and bin. However, many people,
including me, prefer not to use GOPATH and manually organize their project files.

So, if you are a big fan of shell variables, you can put all these kinds of definitions in either
.bashrc or .profile, which means that these environment variables will be active every
time you log in to your Unix machine. If you are not using the Bash shell, which is the
default Linux and macOS shell, then you might need to use another start up file. Check out
the documentation of your favorite Unix shell to find out which file to use.

[ 27 ]
Writing Programs in Go

The upcoming screenshot shows part of the output of the following command, which
displays all the environment variables used by Go:
$ go help environment

The output of the "go help environment" command

[ 28 ]
Writing Programs in Go

You can find additional information about a particular environment variable by executing
the next command and replacing NAME with the environment variable that interests you:
$ go env NAME

All these environment variables have nothing to do with the actual Go code or the
execution of the program, but they might affect the development environment; therefore, if
you happen to see any strange behavior while trying to compile a Go program, check the
environment variables you are using.

Using command-line arguments


Command-line arguments allow your programs to get input, such as the names of the files
you want to process, without having to write a different version of the program. Hence, you
cannot create any useful systems software if you're unable to process the command-line
arguments passed to it.

So here is a naïve Go program, named cla.go, that prints all its command-line arguments,
including the name of the executable file:
package main

import "fmt"
import "os"

func main() {
arguments := os.Args
for i := 0; i < len(arguments); i++ {
fmt.Println(arguments[i])
}
}

As you can see, Go needs an extra package named os in order to read the command-line
arguments of a program that are stored in the os.Args array. In case you do not like
having multiple import statements, you can rewrite the two import statements as follows,
which I find much easier to read:
import (
"fmt"
"os"
)

[ 29 ]
Other documents randomly have
different content
altars of their great and beautiful Temple their most valued
possessions, the already greatly lowered mountains were growing
less majestic, elevations imperceptibly were becoming levelled,
valleys were being filled to the level of the plains, and flowing
streams were being lost or diverted from their courses. The changes
of centuries are as the long, long thoughts of the Infinite Mind. They
go forward, perhaps almost imperceptibly, but they go forward.
Thus in time the region about Tena̤ va̤ h grew infertile, and gradually
the population drew away to more favorable lands. The multitudes
who, during many centuries, had journeyed to the Temple to
worship and to offer sacrifices, gradually ceased their attendance.
The altar fires which, during centuries, had glowed incessantly,
burned fitfully, then died away and the Temple fell into disuse, then
into decay, its treasures serving for the enrichment of other shrines.
With disuse of the Temple, Tena̤ va̤ h became entirely deserted, and
for centuries past its ruins have found sepulture beneath the shifting
sands, which, ere long, through the influence of the beneficent
system, will yield up many buried pages of its history.
Now I will reply to your question. These statues are regarded with
such reverential awe that ever the Priesthood have protested against
their removal elsewhere, and the Government sees to it that at
stated times competent persons are dispatched to this lonely spot to
clear away drifting sands and to keep them and the altars in perfect
repair.
From Entoans who recently have come into our Spirit Realms, we
learn that when the system shall have reached this locality, on this
spot the Government will erect another Temple. Is it too much to
hope for, too much to expect, that it will be dedicated to the One
Whose chiefest attribute is love?
De L'Ester—We will hope that it may be so. This we know, that no
more on these altars will the crime of human sacrifice be
perpetrated. These survivals of a tragic past do well to observe
perpetual silence, for if they might even whisper the story of the
atrocities committed in their names, the more enlightened, gentler
Entoans of to-day would shrink from it in horror.
Now we must be up and away. Gentola̤ , of all the scenes you have
observed, none, I think, have appeared so utterly lonely, so
pathetically forsaken as this verdureless plain and those sombre,
gigantic statues standing like silent sentinels over the buried city and
temple.
We now will follow northward the western shore of Yoitan-dylû, and
shortly we will arrive at some irrigated lands and an inconsiderable
and rather modern city named Crysta̤ Fûyon, the name of its
founder, and it is the capital city of this province, A-Shinoh. Yes,
those green, luxuriant growths are in strong contrast to the
adjoining desert lands. No, they are not irrigated by the water of
Yoitan-dylû. You forget that it is a salt sea. To procure water for
irrigation and for the service of the city, Crysta̤ Fûyon instituted a
system of artesian wells, which was not difficult of accomplishment,
as at no great depth, even under desert lands, there is an
abundance of water.
George, for a few moments we will pause here. Yes, it is an
attractive scene. In the near distance is Yoitan-dylû, on whose foam
capped waves vessels of various kinds are tossing on their ways, and
on its hither shore is white Crysta̤ Fûyon, with its beautiful snowy
temple and many fine structures. On its landward side the city and
its pretty suburban homes are surrounded by the luxuriant greenery
of grains, grasses, fruit-bearing and other trees, and a wealth of
blooming shrubs, vines and plants. Certainly Crysta̤ Fûyon, the
founder of the city and of the Irrigating System which has reclaimed
many miles of arid lands, deserves high praise for his efforts. Oh,
yes, for over half an Ento century he has been on the spirit side, yet
his interest in the city and its fortunes is unabated. Ah, Sylvian and
Inidora̤ are coming to meet us.
Inidora—Lohaû, lohaû, ēmanos.
De L'Ester—Hail, and a loving welcome for you, dear friends.
Sylvian—And for you all our hearts speak a fond greeting. No, we
have not long awaited your coming, but long enough for Inidora̤ to
relate to my willing ears the story of his unlooked for finding of his
other self and his attempts to establish a mutual rapport, in which,
happily, to a degree, he has succeeded. What word do I bring you
from Da̤ o? It is that for the present your journeyings must cease.
Valloa̤ is about to pass into our Spirit Realms, and in anticipation of
the event which can no longer be delayed, a vast number of our
friends of many Planetary Spirit Realms have assembled to witness
and to aid in the anticipated successful culmination of our Mission.
That it will be successful we no longer doubt. Valloa̤ and Dano now
fully realize that life does not end with death of the body, and in a
measure this assurance assuages the sorrow of their approaching
brief separation. For Omanos Fûnha̤ there is but one step to be
taken, when gladly he, too, will embrace the faith that will assure
him of the existence of another world, where he will find his dear
ones. Unconsciously he and many others are shrinking away from
the old dread beliefs, and light from Spirit Realms is penetrating
their consciousness and inspiring them with the hope that at last
Andûmana̤ has heard their importunate cries and is about to grant
them continuous existence.
Valloa̤ now scarcely animates her physical body, and like an
imprisoned bird she struggles for freedom, yet even as she tries to
escape, her beautiful eyes, full of love and pity, turn to her
despairing father, then upon her grief stricken lover, Dano Andûlēsa̤ ,
who kneels by her couch murmuring words of tenderness and
covering her cold hands with tears and kisses. His Spirit vision has
grown very clear and as in bewilderment he gazes upon the partially
freed Valloa̤ , then upon the wasted form he so long has adored, in
piteous tones he cries, "Valloa̤ , Valloa̤ , whither goest thou? I see
thee, and thou art escaping from thy body, and thou art not dead.
Oh, thou dread mystery death, take me, oh take me too, for
wheresoever my love may go, I, too, would go." Then again he cries,
"Woman, woman of another world, come to me, come to me. Thou
didst promise that in the supreme hour of trial thou wouldst come to
me. Oh, come and teach to me the meaning of death." And thus the
pitiful scene repeats itself, and the change is very near.
Gentola̤ , the time has arrived for our departure for Da̤ o, and soon in
the presence of Omanos Fûnha̤ and those about him, you, through
the departing Valloa̤ and her affianced, Prince Dano, will proclaim
the glad tidings that death of the physical body affords release of
the immortal Spirit. That life is unending, and that in a World unseen
of mortal eyes all surely will find their loved ones whom they had
mourned as having gone into eternal Silence.
Among those about the couch of Valloa̤ is Ozynas Dûlsa̤ , the Most
High Priest of the Temple Zim, which you may know is the most
sacred of Ento's Temples. Through purity of life and most ascetic
habits this Most High Priest has to an unusual degree developed the
Senses of Clairvoyance and Clairaudience, and when he shall come
to understand their real meaning he will become a powerful force in
the introduction of the new religion. Perhaps you are aware that all
humans possess these senses, and that under favorable conditions
all may exercise them. No, the case of this Priest is not exceptional.
All high Priests are chosen for the position because of their supposed
ability to hold converse with the Deific Ones. That they hold
converse with discarnated Spirits is true, and naturally you may
wonder why they and the peoples have not learned of the continuity
of existence. The reason is obvious. Since ancient times a harsh,
unyielding religious creed has held in bondage both Priests and
peoples, and lest the Gods might call them to a fearful account for
their impiety, none have dared to assail it. Such Spirit
communications as from time to time the Priests have received, if
opposed to the creed, have been dismissed as mere hallucinations,
but when in harmony with the creed they have been regarded as of
Divine origin. Without such intervention as our Mission proposes this
unhappy condition must indefinitely continue, but when, through
such evidence as the Mission will offer, Omanos Fûnha̤ and those
nearest him shall have accepted the new faith, the way will be made
clear for Priests and peoples to follow the light which shall lead them
into ways of greater happiness than ever they have dreamed of.
Ozynas Dûlsa̤ , who is nearing the threshold of truth, is a
courageous, eloquent and very spiritual man. Through recent
experiences of Valloa̤ and Dano he is so nearly convinced of the
continuity of existence that he is ready to battle against the old faith
and for the reception of the new religion, whose heralds noiselessly
but determinedly are approaching the sorrowful peoples, resolved to
dissipate the darkness which ever has enshrouded their lives.
Now look straight ahead and in a moment you will perceive the dim
outlines of the lofty domes and loftier Light and Signal Towers of
Ento's capital city. To the left of the loftiest Signal Tower which
overlooks the city is the residence of the Supreme Rulers of Ento,
and where now Spirit hosts are concentrating their forces, and
where very soon you will be the central figure of what to you and
this dear youth will be a strange drama. I much regret my inability to
converse with you directly, but I trust that our mutual friend has
made my meaning clear to you.
De L'Ester—I believe that I have correctly translated all that you have
said, and now that the momentous hour has arrived for a brief time
our Sensitive must return to her home so that she may arrange for
an unusually prolonged absence from her physical body. Within a
half hour we will meet you near or in the palace.
Info oovistû.
Gentola̤ , George and I will swiftly bear you to your home, where I
shall have something of moment to say to you. You will close your
eyes, for we shall traverse the space between Ento and Earth with
utmost speed. Ah, ah. That is well. Now unclose your eyes, for you
are safe within your quiet, darkened room, and no one but the
faithful Vena is in the house, and she is preparing to leave it, but you
will request her to remain at home, for you must not be left
unattended. Now listen attentively to what I shall say. As you have
learned, but do not now clearly remember, Valloa̤ , daughter of
Omanos Fûnha̤ , Osy Hûn, is about to pass into Ento's Spirit Realms,
and that success may attend the Mission of Love in which you and
we are engaged, we must ask you to unreservedly submit yourself to
our requirements. Rest assured that we will guard you carefully, and
by all that is Divine we pledge ourselves that you shall not be tried
beyond your strength. To prevent possible injury, we desire that you
shall charge Vena to, on no account, permit any one to enter the
house during your submergement, and that will occupy six, probably
seven, hours. Say to her that she must not attend the door bell or
open the door of your room, and do so at once, for we must hasten
our return to Ento.
Gentola—I have instructed Vena to remain in the house, to allow no
one to enter it, and to leave me undisturbed until five o'clock, which
will be seven hours hence.
De L'Ester—We have heard your conversation with the girl, who is in
a state of nervous alarm lest some evil may befall you. Ask her to
lower the window shade in the adjoining room. Some rays of light
are penetrating the desired darkness of this one, and it may be well
to further reassure her, so that she may not feel impelled to disturb
you. That is well, and all things being arranged to our satisfaction
we at once will depart. Close your eyes and render yourself passive.
You are not afraid?
Gentola—Not afraid, but a little nervous. As I ever have found you
true to your word, I will trust you to the end.
De L'Ester—That you safely may do, for aside from all other
considerations we greatly desire that you shall yet a while remain on
the Earth plane, that with your approval we may make further use of
your peculiar phase of Mediumship. We have not labored all these
years to fit you for a definite purpose to now willfully permit injury of
our Instrument. You may believe, too, that in our demands upon
your time and strength for the furtherance of our Mission, we are
not actuated by selfish motives, and in time you will understand that
if you have suffered and practiced much self-denial, we, too, have
sacrificed much that we might aid in the accomplishment of what
you and we regard as a sacred duty. Now you are tranquil and we
are ready for our flight to Ento.
You now may unclose your eyes for we are nearing Da̤ o, and you
may perceive its many stately structures, whose domes and towers
are in relief against a background of cloudless azure sky. We now
will approach the Palace, which you will observe is enveloped in a
shining, mistlike aural cloud, within which a host of exalted Spirits
are aiding in the Spiritual unfoldment of Omanos Fûnha̤ and others
who, ere long, will proclaim to the peoples of Ento the glorious truth
that the Spirit, the real Self, survives the change called death. When
presently we shall enter within the aural cloud you will clearly see
what you never—But I must not anticipate, and you will strive to
regain your usual tranquillity.
One seldom sees a more artistic structure than this massive, stately,
harmoniously designed residence of the Supreme Rulers of Ento, its
lovely surroundings affording an admirable setting for such a gem of
architecture. Indeed the entire city is an architectural dream. It
strictly is a residence city, though of necessity in it are bazaars and
marts containing all that is finest and best pertaining to art,
manufactured wares and natural products. No, it is not an extensive
city, the population not exceeding a half million, but it is the richest
city of Ento, and one of the oldest.
Now you are quieted and we will join our Band within the aural
cloud.
Gentola—De L'Ester, friends, wait a moment; I believe I am
frightened. Oh, who are those wonderfully beautiful Beings? Are
they Angels or are they Spirits? Oh, I am overwhelmed by the
amazing spectacle.
De L'Ester—Tranquillize yourself, I pray you, tranquillize yourself;
none but loving friends are here. Those radiant Beings are exalted
Spirits from many Spirit Worlds, and conditions are such that for the
first time during our Mission you see Spirits as they really are. You
are aware that the physical body is composed of grosser elements of
substance, and the Spirit body of elements more refined, the
elemental quality of the Spirit body depending upon the manner of
existence of the mortal, so you readily may conclude that those
Spirits are of an exalted plane, else they would not present such a
glorified appearance, neither would they be able to serve the
purpose for which they have assembled. Adonēon, the leader of a
Band, desires to address you.
Adoneon—Trembling one from the Earth-world, the Sorrowful Star,
upon which I, too, once dwelt, I pray you to accept our gentlest, our
most loving greeting. Once we all existed in mortal forms, but having
been freed from physical expression we present to your
unaccustomed gaze an appearance which startles and occasions you
some trepidation. Will it calm your disquietude if I say that could you
see yourself as we see you, you would be as greatly amazed at your
real appearance as you are at our own. Then be at peace, for as we
are, you some time will be, and then, as now, gladly you will serve
the lowliest of the human Brotherhood. Gentola̤ , you are rightly
named, for only one of kindliest nature would risk the severance of
the ties of your present Embodiment, that thus you may aid this
Mission of Loving endeavor. You desire to learn somewhat of my
earthly history. As you will, but it must be as the merest fragment of
the whole.
Rome was my birthplace, and I was the only child of persons of
distinction. From my earliest youth I revolted against the gross
licentiousness and debauchery, not only of the masses, but of those
in highest places, whose criminally bestial orgies were beyond
description, vile and demoralizing. My parents, too, shrank in horror
and disgust from a condition of society which words cannot express.
So did others, but those who dare oppose themselves against the
example of the conscienceless Emperor Nero, and his equally
conscienceless courtiers, did so at the peril of life and estate.
Through his intolerable tyranny I, with other youths of the best
blood of Rome, were driven to plot rebellion against his misrule, and
when our hopes of success were at the highest, a treacherous youth
betrayed us and we were arrested and sentenced to death in the
arena. My beloved father was shorn of his rank and possessions, and
with my gentle mother, was driven into exile, which they did not long
survive. But Nero, the insane, brutal tyrant, the ferocious, drunken
beast, and the curse of his unhappy time; Nero, who made human
agony his pastime, still lived to gleefully laugh while naked, empty
handed victims were cast into the arena to be torn limb from limb by
creatures no more savage, no more relentless than the insensate
wretch who gloated over the horrible scene. Earth has not harbored
a more ignoble mortal than he who styled himself, and indeed
regarded himself, as the "Divine Cæsar."
When the hour of my agony arrived, I, with many others, one a fair
girl scarcely beyond childhood, were driven to our doom. Some,
through terror, swooned into merciful oblivion, others shrieked wildly
and pitifully, frantically strove to escape from the great beasts who
tore them into fragments, and still others instinctively fought for life,
or coweringly shrank from their hideous fate. But not I, not I. As an
enormous lion rushed like an avalanche from the opened door of his
cage, the young girl clung to me for protection. One glance at her
wide open eyes and terror stricken, lovely face, round which her
golden hair fell in curling profusion, inspired me with courage born
of pity and despair. Putting her behind me, I strode toward the lion,
my burning, unwavering gaze meeting the glowing eyes of the
famished and enraged beast, and for a moment the crouching
creature hesitated, and Nero shouted and clapped his jewelled
hands. The next instant the lion launched himself against my naked
form and in another moment I was freed and beyond the reach of
the cruelest of all creatures—the human animal.
After the lapse of half a thousand of your years, at my own desire,
and for a purpose, the Angels of the Visitation found me a birthplace
on the glorious planet Jupiter. Your astronomers would question this
statement. They do not take into account the fact that necessarily
they possess but a limited knowledge of the constitution and
conditions of the Planets of our Solar System, or of the Beings who
may inhabit them, and they do not recognize the more important
fact that Spirit, the Life Principle, is indestructible, and that it
possesses the ability of adjusting itself to other environments than
those of Earth. From Jupiter's Spirit Realms I, and these my
comrades have come to aid in this attempt to bring Spiritual
enlightenment to the sorrowful children of Ento. Our Band of nine
Spirits will endeavor to come into harmonious relations with Omanos
Fûnha̤ . To other Bands of Spirits from other Planetary Spheres have
been assigned special duties. Upon De L'Ester and his Band will rest
the responsibility of controlling and directing you. As far as possible
our plans have been perfected, and the supreme moment having
arrived, may the Divine, Intelligent, All Potent One direct and aid us
in our endeavor to fulfill the Law of Love.
De L'Ester—Gentola̤ , now that you have grown tranquil, we will enter
the apartment of the passing Valloa̤ . Be attentive while I inform you
as to who some of the assembled personages are, then you will
describe the surroundings of this pitiful scene. Later, your deeper
submergence will oblige me to continue a narration of what may
occur. Do you understand?
Gentola—I do, and shall try to meet your wishes. I find myself
standing at the foot of Valloa̤ 's couch, which is near the centre of the
very spacious apartment, whose walls and ceiling are marvels of
beauty. Upon their ivory white surfaces are sprays of exquisite
blossoms so true to nature that it seems as though one might gather
them from their delicate foliage. Rich tapestries of palest blue,
combined with snowy laces, drape the lofty windows, and fluted
panels of the same tapestry separate the flower designs on walls
and ceiling, the effect being very refined and beautiful. On opposing
sides of the apartment great mirrors are let into the walls, their
frames and the woodwork of doors and windows being in white and
gold and the floor is such an exquisitely dainty mosaic that it seems
a profanation to step on it. There are some very beautiful divans and
chairs and a large, handsome table which, with the exception of the
lovely couch on which Valloa̤ lies, completes the furnishing of the
apartment.
Through a window from which the drapery is drawn aside the light
falls upon a young girl whose angelically lovely face is framed in a
mass of curling, golden hair. It is the face of the young girl you once
showed me in a picture, but it is more mature, more expressive,
more spirituelle, than the pictured face. The soft, fleecy, white couch
clothing outlines a tall, slender form, somewhat emaciated, but
modelled most beautifully, and as she lifts her hands to push away
from her low, wide forehead her shining hair, I see that they are as
white as lilies and exceedingly shapely. On one side of the couch sits
Omanos Fûnha̤ , a majestic, very handsome, dark skinned man of
about middle age. On the other side of the couch kneels Dano, his
mournful gaze fixed upon the face of the dying girl, whose
expression is serene but very pathetic. In Dano's clasp is her left
hand, which he holds against his tremulous lips. With her right hand
she fondly but feebly caresses her father's stately head, bowed near
her own, and her large, beautiful azure hued eyes look into his
despairing face, then turn toward the sorrowful face of her
affianced, and she murmurs low, broken words of endearment for
both. Dano's father, Basto Andûlēsa̤ , who, with bowed head and
folded arms, stands near the head of the couch, is a picture of woe.
By Dano's side stands his mother, a very tall, olive skinned, strikingly
handsome woman, whom her son closely resembles. On her face is
an expression of great tenderness, as she whispers fondly pitiful
words to the dying girl, who gently touches her face and smiles up
at her. Suddenly, with a quivering moan and a look of terror in her
dark eyes, she draws away, but quickly recovers herself, and again
she stoops to murmur loving words to Valloa̤ and to Dano, upon
whose dark, flowing hair her tears fall like rain. Near Omanos Fûnha̤
stands the Most High Priest Ozynas Dûlsa̤ , and what a singularly
grand looking man he is. He is taller than any Entoan I have seen;
taller even than Omanos Fûnha̤ whom I think he resembles. As he
stands erect, silent and motionless, he looks like a draped bronze
statue. There is a peculiar expression on his quiet face, a sort of
introspective expression which suggests the thought that he is
questioning himself as to the mystery of death, whose dread shadow
is stealing over the beautiful face of Valloa̤ .
Of the host of Spirit men and women thronging this apartment, the
entire residence and the aura inclosed space about it, what can I,
what shall I say? To my unfolded vision the walls oppose no barrier,
and with inexpressible awe and wonder I gaze upon these luminous
ones, whose faces and forms possess a beauty and majesty
indescribable. I can think of no other word than Godlike that will
convey my idea of their appearance, but I—but language fails me—I
—can say—no—more.
De L'Ester—Before narrating what occurred after Gentola̤ ceased
speaking I will say that the Organization controlling this Mission
consists of seven Bands of advanced Spirits of various Planetary
Spirit Spheres, and that our Mission is not an isolated one. On all
Planets inhabited by Spiritualized humans, Spirit Missions for the
accomplishment of various purposes, constantly are being carried
forward. On Earth, at this time, more than one Mission is in
progress. Some will elevate humanity; others, under control of
Spirits not of bad intentions, but of a low plane of evolvement,
hence ignorant as to results, will debase and retard progress. I make
mention of this matter so that if perchance some may read this story
of our Mission they will understand that it is but one of many.
Having become submerged to a degree that rendered her incapable
of further speech, and the moment of Valloa̤ 's departure being close
at hand, it became imperative that our Instrument should be
illumined to her highest capacity, so that she might deliver our
message to Omanos Fûnha̤ , to Dano, to the Most High Priest, and to
others surrounding the passing girl.
At the moment of midday Gentola̤ was made to call softly but
distinctly, "Dano! Dano!" All heard the voice, and a look of startled
inquiry was on each face. Raising his head for a moment Dano
intently listened, then breathlessly he questioned, "Who calls me?
Who calls me?" But for a little there was no reply, and only the faint,
fitful breathing of the dying girl broke the profound stillness. Then
the seven Bands of Spirits formed in Circles, and their combined
forces were brought to hear upon Omanos Fûnha̤ , Dano, Ozynas
Dûlsa̤ , and upon Valloa̤ , whose vital energy for the moment was
augmented. Instantaneously Dano's Spirit Senses were so quickened
that he perceived not only Gentola̤ , but in a less perfect manner our
entire Band, upon whom he gazed curiously, evidently doubting our
reality. His interest being centered in Gentola̤ , quickly he turned
toward her, his face irradiated with surprise and joy. Inclining his
head near Valloa̤ 's in low, trembling tones he exclaimed, "She has
come, as she promised; she has come, Valloa̤ . Valloa̤ , my dearest
one, see you not a strange Being by the side of your father?" The
yet conscious girl smiled and murmured, "Yes—yes." Looking about
him the greatly disturbed Omanos Fûnha̤ exclaimed, "I see no one, I
see no one. Oh, my children, our mutual sorrow confuses our
senses, and we imagine unrealities. Dano, Dano, I pray you compose
yourself lest we disquiet our dearest one." As Omanos Fûnha̤ uttered
these words an expression of intense surprise and bewilderment
stole over his face, and over the face of Ozynas Dûlsa̤ , for at that
moment their Spirit Senses were so unfolded that in awed and
terrified silence they saw and heard.
Then, at my dictation, in a voice low but audible to all, Gentola̤
delivered our message. "Dano, Dano," she said, "as I promised so
have I in your hour of deepest sorrow come to you. You perceive
that Valloa̤ , the Real Spiritual Valloa̤ , is well nigh freed from the frail,
beautiful form you all love so well. In a few moments she will be
released; then her golden haired mother and her Aunt Sylvian,
whom you also perceive hovering above the couch, will bear your
love to her home in the glorious Spirit World, where you and all her
dear ones ere long will rejoin her. In this hour of your greatest
sorrow I bear you a Message that henceforth will fill your life and the
lives of Ento's children with immeasurable peace and joy. Omanos
Fûnha̤ , and you, Ozynas Dûlsa̤ , Priest of a hopeless religion, listen
that you, too, may receive knowledge of the grandest Truth that can
be revealed to man. Through purity of life, and a noble ambition to
serve rather than to rule, and recently through keenest anguish of
soul, you, Omanos Fûnha̤ , have so unfolded your Spiritual Self that
you are prepared to accept this Truth, and you, Ozynas Dûlsa̤ ,
through lofty aspiration and exceptional ability to perceive that which
hitherto you have not understood, will proclaim the Revelation that
the physical body is but the casket in which the priceless jewel, the
Immortal Self, which is the deathless expression of the Infinite Spirit
whom you name Andûmana̤ , is enshrined. Hitherto, because of the
positiveness and materialism of your religious beliefs, so dense has
been the aural atmosphere about you, that light from Ento's and
other Spirit Worlds has not penetrated your Spiritual consciousness.
During past centuries the Immortals of many Spirit Worlds have
striven to communicate with the children of Ento, that thus they
might bring hope to despairing ones who have lived, loved and
sorrowed, even as you who love this, your dearest one, now sorrow.
Striving, watching, waiting, loving, pitiful spirits, who once were
mortals like yourselves, at last have found their opportunity and
have hastened to bring light into darkness, joy for sorrow and hope
for despair. They, with glad hearts, have come to proclaim to you
that life and Spirit are one and indestructible. That, though unseen
by mortal eyes, the animating Principle, the Real Self, is Immortal,
and in Realms indescribable by human language, those who have
passed from Ento and other Worlds, live, love and enjoy, or sorrow,
in accordance with the purity or impurity of their mortal existence.
They also have come to proclaim to you that there is but One God,
Who is the Infinite Spirit, Who permeates all things. The Infinitely
Intelligent Spirit, who knows all things. The Infinite Energy, who is
the Source of all things. The Dual, Unseeable, Unknowable One,
whose manifestations alone declare the Infinity of their origin. They
have come to proclaim to you that Ento is but one of myriads of
Worlds, comprising an illimitable Universe, whose every atom is
vitalized and permeated by this Infinite Spirit, who no more lives in
the shining Orb which sheds its radiant beams over the lands and
seas of Ento and over other greater Worlds far away in space than in
the petals of the rodel, or in the atoms floating in the atmosphere.
When the great flaming Star you ignorantly have thought the abode
of Andûmana̤ , the Supreme One, has for a time disappeared from
your view, and the darkness of night has fallen over this portion of
your Ento World, reverently you have gazed toward the shining
points in space, aye, so far away in space, that you can form no
conception of the immensity of their distances from Ento, and you
have believed them the Lamps of the Realm of Astranola̤ . Learn, oh
children of our common Father, Mother God, that they are Worlds,
some of them of such vast proportions that, compared with them,
Ento and the Earth World, where I dwell, are dwarfed into
insignificance. Some of these worlds are peopled by very advanced
and exalted humans, others by mortals in various stages of
evolvement, and all are the children of the Infinite One. I cannot
now speak more fully of these matters, but, concerning them, later
on you shall receive further instruction.
"Dano, dear youth, let the words of our Message sink deeply into
your heart, for you are the chosen herald, who first shall proclaim
the new Faith to the children of Ento. Be courageous, be faithful,
and in accordance with the measure of your courage and your
faithfulness shall be your consciousness that ever by your side will
walk your spirit bride, your other Self, Valloa̤ . Dano, Dano, are you
strong enough, are you courageous enough to give to your sorrowful
people the Message of the new faith?"
For a little Dano hesitated, and Valloa̤ , over whose fair face the
whiteness of death was stealing, reached toward him a tremulous
hand and faintly murmured: "Dano—my beloved—you will—you—will
—give—this truth—to—our—despairing—people, and—and—your
Valloa̤ will—walk—with you—until—your glorious—work—shall—be—
ended."
In her dimming, azure hued eyes was an expression of
immeasurable entreaty, and, overwhelmed with emotion, gently,
tenderly, Dano pressed her cold hand to his lips, and in low, fervent
tones said: "I believe in One Supreme Being, who is beyond my
finite comprehension. I believe that beyond this sorrowful life there
is another state of existence, where all will find their beloved dead,
with whom they will live and love forever, and I promise you, oh, my
dearest, that for as long as I may live in my mortal body, I will
proclaim to our peoples the amazing, the glorious Truth that has
been revealed to us. That it is a truth I well know, for even as I gaze
upon your beloved mortal form, rising above your head I see your
Real Self, radiant and lovely beyond all beauty of mortal woman. I
see, too, your mother, your wondrously beautiful golden haired
mother, and Sylvian, the lovely and gracious woman whom in my
childhood I revered as I revered the Goddesses of Astranola̤ . They
support you in their arms, my dearest, and they are about to bear
you away from my sight. Valloa̤ —Valloa̤ —oh, my beloved, open your
beautiful eyes—oh, speak to one once more. Do you hear me,
Valloa̤ ? Do you hear me? Answer me if but with a word, or a smile,
so that I may know that you have heard my vow." As though in
answer to his piteous appeal Valloa̤ 's eyelids quivered and slowly her
blue eyes unclosed and gazed into Dano's, and a faint smile played
about her parted lips. Then, with a supreme effort, her gaze turned
upon her father, who bent his head near her to catch her whispered
words, the last he would hear from the mortal lips of his idolized
child. "Father, father," she sighed, rather than said, "it is true—
promise—me—your—child—to—give—this—truth—to our—people.
Fath—er, prom—ise——" The blue eyes closed, a smile wreathed
itself about the sweet mouth, and—all was still.
We, who have observed the release of many Spirits, seldom have
witnessed a scene so pathetic, so profoundly touching. About the
spacious chamber were grouped the Seven Spirit Circles, deeply
sympathizing with the bereft ones, who for a time remained in
voiceless apathy, their overwhelming grief finding no utterance in
word or outcry. Cradled in the arms of her Spirit mother and of her
Aunt Sylvian, the Spirit Valloa̤ laid like a smiling, sleeping infant. By
the side of the couch knelt Dano, holding in his warm clasp the cold,
lifeless hands of his love, and gazing upon her pallid face in
speechless agony. Bending over him his mother by her silent
sympathy sought to console him, her fast falling tears evincing the
depth of her own sorrow. Still by the side of Omanos Fûnha̤ stood
Gentola̤ , and though intently listening to our Message, not once had
he looked at her, but now impelled by our concentrated desire,
slowly, timidly he turned his gaze upon her, and for the first time
fully realized the presence of a spirit. She alone of the assembled
spirits being perceptible to his but partially unfolded Clairvoyant and
Clairaudient Senses, awe stricken and trembling he sank to his
knees, and in broken accents questioned: "Who art thou? What art
thou?" At my dictation she replied:
Gentola—By some spirit friends I have been named Gentola̤ , and am
not of your people, but am of a World afar in space, which by its
peoples is known as Earth. In a manner which I now cannot explain
I can leave my living physical body, and by some wise and strong
Spirits who understand Spiritual Laws, I have been borne from Earth
to your World, that through me they might reveal to you and to your
people that the Spirit, the Real Self of humans survives death of the
physical body. For the reason that I am less etherealized than wholly
freed Spirits, you, Dano, and you, Ozynas Dûlsa̤ , perceive me, and
were your superior Senses more fully unfolded, you would behold
Sēlona̤ , the purple eyed, golden haired wife of your youth, and her
sister, Sylvian, too, who will assist in bearing to her beautiful home
in your Spirit World your angel daughter Valloa̤ . Sēlona̤ and Sylvian
implore you to remember Valloa̤ 's last words, and if in your
consciousness the new Faith may find a steadfast abiding place you
will gladden the hearts of your beloved and loving ones by openly
declaring it. Remember that though you are not conscious of their
presence, often they are near you, reading your every thought, and
that your joy is their joy, and that in their hearts your griefs find
quick response. Ever your gentle, loving wife guards and guides you
in your ways. Ever, as you walk to and fro, silently her foot-falls keep
pace with yours, and when the hour of your release from your
mortal body shall arrive she and Valloa̤ will be with you, and in a
World whose skies are ever radiant with a light unknown to mortals,
over whose brightest days shadows ever are falling, you will be
reunited with those whom you have mourned as having gone into
perpetual Silence. In this Spirit World the flowers are fadeless, the
balmy air is vibrant with Divinest harmonies and joys such as mortals
cannot conceive of await all whose exalted lives have prepared them
for lofty states of Being. The Guiding Spirits who have brought me
here say that ere long I shall come again to offer to you a fuller
knowledge of the Truth we are striving to reveal to you, a Truth
which shall dispel your fear of death, which is but a transition to a
higher state of existence, and shall bring to you and to your people
consolation and peace inexpressible.
De L'Ester—Ere Gentola̤ ceased speaking, through grief and
amazement Omanos Fûnha̤ was so overwhelmed that had not
Ozynas Dûlsa̤ 's strong arms sustained him he would have fallen
prone. Swaying like a drunken man, he extended his trembling
hands toward Gentola̤ , crying: "Thou sayest thou art from another
World, a World afar in space. Thou sayest that my child Valloa̤ still
lives, and that her mother and Sylvian are here to bear her away to
a World invisible to me. Where is this invisible World of living ones,
and do my dear ones indeed dwell there? And when the breath of
my life shall cease shall I, too, surely continue to exist, and with
them abide forever? And truly are there in space other Worlds,
where men and women live, love and die as do we of Ento? The
thought is too stupendous. I cannot realize it. Speak, I entreat you,
ere my senses totter to their destruction."
Quickly our Forces combined to quiet his somewhat frenzied state,
and again Gentola̤ was made to address him and those about him.
Gentola—I, who am but the Instrument for Spirits more exalted than
myself, can only say that which they dictate to me. When daylight
has merged into twilight, and twilight has deepened into darkness,
myriads of shining points dot the vast expanse of the night sky, and
you have been taught that these shining points are the Lamps
illumining the abode of your Gods and Goddesses, whom you have
regarded as the Messengers of Andûmana̤ the Supreme One. Among
those shining points is one gleaming with a soft, silvery radiance,
which your Priests have named Inglos ēvecto Fryda̤ , which, I am
told, would in my language mean Fryda̤ 's lamp or light. Truly this
silvery point is the Earth world where I dwell. Like all the Worlds in
space it is spherical in form and nearly twice the size of Ento, which
it closely resembles, and, like your world, its surface is composed of
divisions of land and water, and its products of all kinds are very
similar to those of Ento. Our learned ones believe that it is a younger
World than this, as much of its land surface is quite rugged, and
there are mountains so lofty that their peaks pierce the clouds. Its
hills, too, are still elevated, and its valleys deeply depressed,
whereas time has nearly levelled the surface of Ento, necessitating
your vast System of Irrigation, which on the Earth World only in
isolated instances is required. We consider your civilization more
advanced than is ours, which indicates your greater maturity, and in
the arts and most of the sciences your attainments equal or surpass
those of our people, who generally aspire to acquire wisdom and a
knowledge of all that may advance their best interests. Like the
Entoans we have trials and sorrows for our loved ones also pass to
the World of Spirits, and we miss their presence, as you will miss
Valloa̤ 's, but our knowledge of continuous existence enables us to
endure what cannot be avoided, and we well know that when we
too shall pass to our Spirit World we will find all our dear ones who
have preceded us.
Among our learned ones are those who have constructed
instruments very like those through which from the summits of your
great Watch Towers you gaze across the surface of Ento. Through
these Instruments, known as Telescopes, men and women versed in
the science of astronomy are enabled to observe and study the
Worlds in space just as the learned ones of Ento may do when an
acceptance of the new Faith shall free them from their superstitious
fears of the Gods and Goddesses who do not exist, the only God
being the Supreme One, who is a God of Love, and not a vengeful
destroyer of his children.
Like Ento, our Earth World also has divisions of day and night, which
in their duration very nearly correspond with your own, and the Sun,
the same glorious Orb that blesses Ento with light and heat, shines
on our World as well. During a certain period of our year, which is a
little more than half the length of yours, when darkness falls and the
sky is unclouded, afar we behold a beautiful ruddy Star, known to us
as the planet Mars, and of all the Worlds in space none so attracts
our attention as this Star, which truly is this, your Ento World. Those
who have brought me here desire me to say that certain instruction
they now would gladly offer for your consideration must for the
present be withheld, but that when a more propitious hour shall
arrive, through me they will reveal to you much that will add to the
happiness and well being of yourself and peoples.
To your question relating to the locality of the World of living ones I
must reply briefly. About all Worlds sufficiently matured to afford
sustenance and habitation for various life forms and for the children
of the Incomprehensible, Infinite Intelligent Energy you name
Andûmana̤ , there are a Series of Spirit Realms which envelop
material Worlds as the husk of the Plûyma̤ envelops its crimson fruit.
These Realms are suited to the requirements of their inhabitants,
who are Spirits, who through death of the physical body have been
released, and as men, women and children live a more real life than
do mortals. In these Realms all progress toward higher attainments
and greater perfection, and when fitted for the change they pass
from lower to higher realms and greater joys. In Ento's Spirit Realms
your real Self will find all whom you have loved but not lost, for they
live and love you, and in the grandly beautiful home prepared for
you they await your coming. Be patient, then, and from time to time
all that is for your good will be revealed to you. Now, as never
before, Spirits of the higher Realms can penetrate the aura
surrounding the peoples of Ento, and to you three illumined ones will
be revealed that which will inspire and unfold your inner
consciousness, so that with clearer vision you will perceive the
Immortals who ever are about you and all who yet abide in the
mortal form. At this moment this apartment is thronged with
Immortals, who are here to assist in your unfoldment and that of
Dano and Ozynas Dûlsa̤ , who better than yourself comprehends this,
to you, strange occurrence. Gladly these exalted Spirits will aid you
in your search after Truth, which is wholly Divine and which alone
can assist humanity in its ever onward progress. There, Omanos
Fûnha̤ , lies the inanimate form of your beloved daughter, and Dano's
affianced wife, the form which for a brief time was the dwelling
place of the Spirit Valloa̤ , who now in the arms of her mother and
Sylvian is about to be borne to their and her home in your Spirit
World. What Message shall they convey to other dear ones who
await their coming?
De L'Ester—While Gentola̤ was speaking, Omanos Fûnha̤ , Dano,
Ozyras Dûlsa̤ and Dano's parents, who heard her quite audible voice,
stood like so many statues, every sense absorbed in the intense
desire to catch her every word, and when silence followed speech
they looked into each others' faces with an expression of awed
inquiry, but no one uttered a sound. Some moments elapsed, then
Omanos Fûnha̤ slowly turned toward the couch and silently gazed
upon the pallid face framed in a wealth of golden, curling tresses,
then within his trembling palms he folded Valloa̤ 's small, cold,
stiffening hands, covering them with kisses and wetting them with
his tears, then tenderly he laid them over her bosom and turned
away from the couch. Standing erect, with uplifted eyes and hands,
and with an expression of deep emotion on his dark, handsome face,
in impassioned tones his voice broke the stillness.
Omanos Funha—Oh thou Infinite and Supreme One, whose ignorant
but adoring children we are, as our fathers and mothers have
worshipped so have Thy children of a later time worshipped Thee.
When light and heat have brooded over Ento, causing all living
things to fructify and yield sustenance to Thy children and the
creatures of Thy Creation, we have said, "Praise be unto Andûmana̤ ,
the Supreme One, who, from His shining abode, smiles upon us His
children, and with such offerings as we have conceived acceptable
we have sought to manifest our gratitude for Thy beneficence. Yet
ever as we have rendered homage unto Thee our hearts have been
heavy through fear and despair. Ever the noiseless, dusky wings of
the dread Messenger Phra have so overshadowed our lives that now
that Thou callest to us we are too blind to see our way to Thee, too
deaf to clearly hear Thy voice, but since it is Thy Will that now we
shall receive the light of the grandest, most priceless Truth that Thou
canst vouchsafe to us, Thou Wilt lift the shadows from our eyes and
humbly, adoringly, we will strive to find our ways to Thy glorious
presence. The brightest, most precious jewel of the crown of my life
this day hath gone from me, and I am desolate, but it is Thy Will
and I murmur not, for through this Thy Messenger Thou sayest that
after the body ceases to live, in an invisible but fairer World than
Ento the Real Selves of Thy children consciously continue to exist,
and after what Thou hast made us to see and to hear, I, Omanos
Fûnha̤ , doubt it not. Then praise be unto Thee, that through Thy
love for Thine own, after the breath of our lives shall cease we shall
find our beloved ones, and with them ceaselessly adore Thee for this
Thy most precious gift to Thy undeserving but loving children. Raû,
raû, raû."
De L'Ester—All in attendance, spirits and mortals, fervently
responded, "Raû, raû, raû." After a brief pause he turned to the
Most High Priest and said: "Your Sacredness, Ozynas Dûlsa̤ , long
hast thou administered the rites of the old faith; what sayest thou of
this new Revelation from Andûmana̤ , the Supreme One to whom be
adoration forever, that He hath heard our fervent petitions and hath
granted to us and to our sorrowful peoples a knowledge that though
our bodies shall die we shall continue to exist. So long hast thou
been my close friend that thou wilt bear with my rapture, which alas
is tinged with deepest sorrow," and he stooped and kissed Valloa̤ 's
smiling lips and folded hands. Silently, attentively, Ozynas Dûlsa̤
listened to Omanos Fûnha̤ 's words, then with a certain tenderness of
manner he replied: "Thou art the Supreme Ruler of Ento, and thou
art a wise, just, loving and learned man, and even as the chalices of
the snowy rodel turn their perfumed hearts toward Diafon ēvoiha̤
(the sun) so do the hearts of the people turn toward thee for
counsel and sympathy. Thou knowest why the people sorrow, and
thou knowest that even at their feasts joy is a rare guest. It hath
pleased Andûmana̤ to withhold from His children of past times this
wondrous Revelation that life is continuous and that in Realms
invisible to mortal vision the children of His Love shall abide forever.
It is not for us to question His Will or His Wisdom. It is for us to
listen and to obey, so I pray that thou wilt not withhold from the
children of Ento the glad Revelation which hath been vouchsafed to
us in this the hour of our deepest sorrow.
"It may greatly surprise thee to learn that many Priests and
Priestesses of the Temples see and hear as thou now seest and
hearest, but the meaning of it hath not been understood, and fear of
Andûmana̤ and the Deific Ones hath caused them to keep silent and
to cling to old traditions. So convinced am I that the Truth is being
Revealed to us that with thy approval I, Ozynas Dûlsa̤ , gladly will aid
in proclaiming the glorious, the wondrous words of Andûmana̤ 's
Revelation to His children."
While Ozynas Dûlsa̤ spoke, Dano knelt by the side of the couch,
steadfastly gazing upon the lovely face which soon would be naught
but ashes, but toward the close of Ozynas Dûlsa̤ 's speech he arose
and in deep entrancement stood motionless. Aided by our combined
Forces, Zenesta̤ Ha̤ o was enabled to control his Senses and through
him to address Omanos Fûnha̤ , Dano's parents and Ozynas Dûlsa̤ .
Zenesta Hao—I, who through the lips of this entranced youth will
attempt to address you, may be remembered as Zenesta̤ Ha̤ o, long a
Professor of languages in the renowned Galarēsa̤ of Camarissa̤ .
During my mortal existence I, like all the peoples of Ento, was
ignorant of the fact that death of the mortal body releases the
Immortal Spirit, which is the real Self of man, or, to state the fact
more clearly, when the real Self, the Immortal Spirit, finds the mortal
body no longer suited to its requirements, it releases itself and under
the higher, better conditions of the Spirit World, continues its
progress onward, onward forever. Not until I was released from my
worn and aged body did I learn the glorious truth that I was
Immortal. In the sorrowful belief that death was the end of all, I fell
asleep. I awakened to find about me my dearest ones who had
come to bear me to their and my home in the World of the
Immortals. Oh, the joy that filled my enraptured Being when I
became fully conscious that continuous existence, progress and
happiness inexpressible was the reward of a life devoted to virtuous
conduct and loving service for others, and that for those who had
not lived in accordance with their highest ideals there was endless
time and opportunity for the amending of the mistakes and wrongs
of mortal life, and for progress as endless as eternity.
Dear friends, were your Spirit vision fully unfolded, in this chamber
you would behold forms and faces of Spirits who are revered and
famous in the history of Ento. Here are Genessano Allis Immo Rû,
and his little less famous spouse, the Lady Camarissa̤ , and their two
sons Inidora̤ and Genessano, who offer to you all their kindliest
greetings and an assurance of their immeasurable joy that at last the
light of a great Truth is about to irradiate the sorrowful lives of the
peoples of their ever beloved Ento. Here, too, is Ha̤ -Moûfi Adassi
whose name ever is on the lips of all students of nature. He also
greets you all and joins with all the Invisibles present in expressions
of love and sympathy for you in this your hour of mingled joy and
sadness.
Omanos Fûnha̤ , thou art favored beyond all men who ever have
lived on Ento, for even in the hour of thy deepest anguish a joy hath
come to thee, which henceforth shall fill thy days with blessedness
and peace. Then hasten, oh, hasten to crown the days of the
children of Ento with unlooked for gladness. Give to them the
assurance that the old, hopeless faith is no more. That Andûmana̤ ,
the Supreme One, hath revealed to His ever sorrowful children the
highest expression of His love for them, and that henceforth death
shall be known as the Angel who guards the portal between mortal
and Immortal Life.
Basto Andûlēsa̤ , I salute thee and thy gracious spouse, and it is my
pleasant duty to convey to her beloved parents a most tender and
most loving greeting from one who in her early youth passed to the
World of Spirits. I speak for thy ceaselessly mourned daughter Onta̤ ,
who joins her entreaties with ours that you earnestly shall assist in
the introduction and acceptance of the new Faith, which for you and
Ento's peoples shall change the face of all things, and she entreats
you and her mother to encourage her brother Dano, whose clear
seeing vision and understanding of Spiritual things, fits him for a
Teacher who shall proclaim to the peoples the glorious Truth which is
being Revealed to you chosen ones. Since entering our Spirit World I
have learned that during the passing centuries advanced Spirits with
but slight success, persistently have endeavored to penetrate the
consciousness of Ento's peoples, but ever the gross materialism of
their religion, which is founded upon the legends and crude
conceptions of undeveloped, ignorant, primitive peoples, has
opposed an impenetrable barrier to their approach. Baffled and
wearied through perpetual failures, finally Bands of strong,
determined Spirits of our and other Spirit Worlds resolved to attempt
to fit this Earth woman, whom we have named Gentola̤ , to serve as
a means of communication between Spirits and certain Sensitives of
Ento. Being yet embodied in flesh she is less Spiritualized than
ourselves, whose Spirit bodies like that of Valloa̤ , are of such
inconceivably refined substances as to be imperceptible to most
mortals. To Omanos Fûnha̤ , to Ozynas Dûlsa̤ , and to thy son Dano,
whose Spiritual Senses to a degree are unfolded, she is perceptible,
and later on they and thee and thy spouse Ellita̤ will unfold the
ability to perceive wholly released spirits.
Of necessity this Revelation from the World of Spirits is so
fragmentary as to be confusing to minds accustomed to other
beliefs, but from time to time Omanos Fûnha̤ , Ozynas Dûlsa̤ and this
thy son Dano shall receive distinct instruction pertaining not only to
the new Faith, but to other affairs of moment. When Dano shall have
awakened we desire that he shall be informed as to what I have
said, then, through Gentola̤ , will be given to you all some parting
words, and may the Spirit of All Spirits, the Infinite One, whom
Entoans name Andûmana̤ , ever be present in your thoughts, for
from this Divine and inexhaustible Source cometh all that is
beneficent. And now, dear friends, I must say Info oovistû.
De L'Ester—During Zenesta̤ Ha̤ o's address Omanos Fûnha̤ and
Ozynas Dûlsa̤ gazed upon Dano in amazement and alarm, and his
parents who stood near the apparently sleeping youth in awed
silence listened to the strange speech issuing from his lips, but no
one ventured to speak to him or to touch him. When Zenesta̤ Ha̤ o
spoke of Genessano Allis Immo and his wife and sons and of
HaMoûfi Adassi and Onta̤ Andûlēsa̤ , surprise tinged with terror sat
on every face, and in speechless, questioning wonder they looked
into each others' eyes.
When he delivered Onta̤ 's greeting and Message, a great trembling
seized Basto Andûlēsa, who scarcely could sustain his own form and
that of his weeping wife, who, through violent emotion, swooned
into unconsciousness. Gentola̤ , in her now partially conscious state,
realized what was occurring, and to our momentary dismay, her
sympathies became so active that only through our instantly united
efforts were we enabled to prevent her release from her greatly
devitalized physical body. Restoratives quickly revived Dano's mother,
who was gently entreated to withdraw from the chamber, but she
refused to do so, and sat sobbing and murmuring: "She lives—she—
lives, our—Onta̤ , our precious—Onta̤ , our—roina blossom lives, and
some—time we shall find—her. Oh, the joy—of it, the joy—and
wonder—of it. Andûmana̤ , we adore Thee that Thou hast taken—pity
upon Thy sorrowful—children; that Thou hast shown us—that we
shall—find our beloved child, our—Onta̤ ." And thus as a loving
mother would she, between smiles and tears continued her gentle,
loving crooning. Now there was a quivering of the eyelids, a slight
start, and Dano, in a bewildered manner looked about him and in a
hushed tone eagerly questioned: "What has occurred? Have I been
asleep and dreaming? Have I said aught to disturb you, that you
regard me so strangely?" At our desire Gentola̤ drew near him and at
my dictation again spoke to him audibly.
Gentola—Dano, dear youth, even as the dew silently falls into the
perfumed hearts of night's snowy blooms so early into your heart
entered Valloa̤ . In the flower of her beautiful womanhood she has
gone from you and from those dear to her, but she has not gone into
Silence and nothingness, but into a higher state of existence, where,
after your work shall be done, you, too, will go and with her forever
will glorify the Infinite Spirit of all that is. That I may comfort you I
will reveal to you the wondrous fact that all existences in their
nature are dual, the Male and Female Principles constituting the
Duality, and truly Valloa̤ is your other Self, and for all time you two
are one and inseparable. Until you shall release yourself from your
physical body, as your guiding Star ever she will be near you, and
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookgate.com

You might also like