Akagi201
1/8/2014 - 3:19 AM

goscript - run Go golang in scripts!

goscript - run Go golang in scripts!

#!/usr/bin/env bash
set -e
unset TEMP_GOSCRIPT_DIR GOSCRIPT
GOARGS=() ARGS=()
cleanup() {
  RES=$?
  rm -rf "$TEMP_GOSCRIPT_DIR"
  exit $RES
}
trap 'cleanup' INT QUIT TERM
filter() { awk '( NR!=1 || !/^#!/ ) && !/^package /; BEGIN{ print "package main" }' "$@"; }
TEMP_GOSCRIPT_DIR="$(mktemp -d -t XXXXXXXXXX)"
TEMP_GOSCRIPT="$TEMP_GOSCRIPT_DIR/main$$.go"
for ((I=1; I<=$#; ++I)); do
  ARG="$(eval echo \$$I)"
  case "$ARG" in
    -*) [ -z "$GOSCRIPT" ] && GOARGS+=("$ARG") || ARGS+=("$ARG") ;;
    *) [ -t 0 ] && [ -z "$GOSCRIPT" ] && GOSCRIPT=("$ARG") || ARGS+=("$ARG") ;;
  esac
done

{
if [ -z "$GOSCRIPT" ]; then
  filter
else
  filter < "$GOSCRIPT"
fi ;} > "$TEMP_GOSCRIPT"

go run "${GOARGS[@]}" "$TEMP_GOSCRIPT" "${ARGS[@]}"
#!./goscript
package main

import (
  "fmt"
  "os"
)

func main() {
  fmt.Println("hello");
  for i, arg := range os.Args {
    fmt.Printf("arg[%d]='%s'\n", i, arg);
  }
}