Opensourcetechブログ

OpensourcetechによるNGINX/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

Golang(Go言語)を試す

こんにちは、LinuCエバンジェリストこと、鯨井貴博@opensourcetechです。

 

今回は、MacでGo言語環境を整えて、簡単なプログラムを使えるところまでやってみようと思います。

 

なお、ソフトウェアのインストールにはHomebrewが必要になるので、

以下などを参考に予め入れておいてください。

Homebrew & Python3(pip3)インストール on MacOS High Sierra - Opensourcetechブログ

 

 

 

Goのインストール

brew installでgoをインストールします。

bash-3.2$ brew install go
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
buildkit ccls proper protobuf@3.6 s2geometry
==> Updated Formulae
kubernetes-cli ✔ esptool influxdb polyml
python ✔ etsh ipython ponyc
abcm2ps exact-image istioctl postgis
ack exempi jenkins presto
acpica exim jid procyon-decompiler
activemq exploitdb jpeg-turbo proj
aide fades json-fortran protobuf
allegro fastme juju proxychains-ng
ammonite-repl fb-client julius ptex
angular-cli feh kallisto pulumi
anycable-go ffe khal pumba
apache-arrow ffmpeg kibana pushpin
apache-arrow-glib ffsend kubecfg qalculate-gtk
apachetop fio languagetool qxmpp
arangodb flatcc lastpass-cli rabbitmq
armadillo flow ledger rakudo-star
asdf fltk leptonica rancher-cli
atomist-cli flume leveldb rawtoaces
aubio fluxctl lf rbenv
auditbeat folly libbluray redis@3.2
autossh fortio libgaiagraphics redis@4.0
awscli fossil libgeotiff rke
azure-cli fping liblcf rst-lint
bartycrouch freedink liblwgeom ruby-build
bedtools freeipmi libqalculate s3ql
berkeley-db freeradius-server librasterlite scw
bettercap freetds librdkafka sdl
bind frugal libsoundio sdl2
bitwarden-cli fselect libspatialite serverless
bowtie2 fstrm libssh2 shapelib
brew-gem fuse-emulator libtermkey simple-tiles
bzt fuse-zip libtins singular
c-blosc futhark libtommath sip
cabextract fzf lldpd skaffold
caffe gammu llnode snort
cake gdal logstash spatialite-gui
cdk gearboy logtalk spatialite-tools
ceres-solver gearsystem lorem sphinx-doc
cfr-decompiler geogram mackup spigot
cgal geoserver mapnik spirv-cross
checkbashisms gerbil-scheme mapserver ssllabs-scan
chezscheme get_iplayer mariadb stellar-core
cimg getmail mas step
clamav gif2png maxwell streamlink
cli53 gifski mdcat supersonic
clojurescript ginac menhir swagger-codegen@2
cmake git-annex mercurial swiftformat
coffeescript git-cola mesa sxiv
compcert git-fixup metricbeat syncthing
confluent-oss github-keygen mgba taskell
conjure-up gitlab-runner micropython tbb
consul glib-networking mingw-w64 telegraf
convox glm mint termtosvg
coturn glog mps-youtube terragrunt
cppad glooctl mvnvm thors-serializer
cromwell glui mvtools tmux
csvkit gmic nano tokei
curl gmt nave topgrade
curl-openssl gmt@4 nco traefik
datamash gnupg ncview typescript
dateutils gnutls netcdf ucloud
dav1d gocr nginx utf8proc
derby gocryptfs node vala
dhall googler node-build vert.x
dhall-json gosu nss vifm
dlib gpgme ocamlbuild vim
docker gradle octave vim@7.4
docker-completion gromacs odpi vtk
docker-compose groonga opa vulkan-headers
doctl gsoap orc-tools wget
doitlive gssdp ori whois
dovecot gssh osc wsk
dpkg gupnp osm2pgsql wtf
dropbear gupnp-av osquery xapian
dssim gupnp-tools oxipng xcodegen
duply hadolint parallel xmake
dynare hapi-fhir-cli pcl xpa
easyrpg-player harfbuzz pdal xxhash
efl helmfile pdftoedn ykpers
eiffelstudio help2man pgrouting zabbix
ejabberd highlight phplint zenity
elasticsearch homeassistant-cli phpunit zola
embulk hub picard-tools zurl
epic5 i2pd platformio
eslint imagemagick points2grid
==> Deleted Formulae
libutf plan9port protobuf@2.5 protobuf@2.6

==> Downloading https://homebrew.bintray.com/bottles/go-1.12.1.mojave.bottle.tar
######################################################################## 100.0%
==> Pouring go-1.12.1.mojave.bottle.tar.gz
🍺 /usr/local/Cellar/go/1.12.1: 9,794 files, 452.6MB
==> `brew cleanup` has not been run in 30 days, running now...
Removing: /Users/Yoshiki/Library/Caches/Homebrew/kubernetes-cli--1.12.2.mojave.bottle.tar.gz... (19.0MB)
Removing: /Users/Yoshiki/Library/Caches/Homebrew/lxc--3.9.mojave.bottle.tar.gz... (8.6MB)
Removing: /Users/Yoshiki/Library/Caches/Homebrew/linkage.db... (16KB)
Removing: /Users/Yoshiki/Library/Caches/Homebrew/portable-ruby-2.3.7.leopard_64.bottle.tar.gz... (12.4MB)
Removing: /Users/Yoshiki/Library/Caches/Homebrew/telnet-54.50.1.high_sierra.bottle.1.tar.gz... (94.2KB)
Removing: /Users/Yoshiki/Library/Caches/Homebrew/Cask/powershell--6.1.3.pkg... (54.1MB)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/gdbm... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/python... (3 files, 128.0KB)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/readline... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/sqlite... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/xz... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/lxc... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/gettext... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/inetutils... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/libidn... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/kubernetes-cli... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/openssl... (64B)
Removing: /Users/Yoshiki/Library/Logs/Homebrew/telnet... (64B)
Pruned 7 symbolic links and 12 directories from /usr/local
bash-3.2$ go version
go version go1.12.1 darwin/amd64

 

 

Goのサンプルプログラム

 プログラムの中身としては、

TCPポート7777で待ち受けて、Webクライアントからのアクセスに対して「Test Go for nginx unit」という文字列を返すシンプルなものです。

https://github.com/kujiraitakahiro/nginx_unit/blob/master/sample.go

bash-3.2$ cat sample.go
package main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Test Go for nginx unit")
}

func main() {
  http.HandleFunc("/", handler)
  http.ListenAndServe(":7777", nil)
//nginx unitでは http.ListenAndServe を unit.ListenAndServe に変更する
}

 

 

 Webクライアントからのアクセス

 作成したGoプログラムを実行します。

bash-3.2$ go run sample.go

 

ブラウザから「localhost:7777」でアクセスすると、

以下のように作成したコンテンツが返されました。

f:id:opensourcetech:20190405004738p:plain

 

その他、Goでやりたいこと

nginx unitを使って、Goアプリケーションの実行をする予定です。

https://unit.nginx.org/configuration/#go-node-js-applications

 

以下の2点さえ押さえておけばOKとのこと。

・nginx/unitのimport

・http.ListenAndServeをunit.ListenAndServeに置き換える

f:id:opensourcetech:20190405005137p:plain

 

 

 

www.slideshare.net

github.com

www.facebook.com

twitter.com

www.instagram.com

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

 

 

Opensourcetech by Takahiro Kujirai