zaquestion: add program to learn contribution process

Change-Id: If0988b2cd42c3f34de671a645207fca633fc4162
Reviewed-on: https://go-review.googlesource.com/132300
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Zaq? Wiedmann 2018-08-30 11:56:49 -07:00 коммит произвёл Ian Lance Taylor
Родитель 115154e7b5
Коммит 32114ac7ab
5 изменённых файлов: 352 добавлений и 0 удалений

18
zaquestion/main.go Normal file
Просмотреть файл

@ -0,0 +1,18 @@
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"fmt"
"os"
"github.com/adamryman/gophersay/gopher"
)
func main() {
fmt.Println("Learning to contribute to your favorite language at Gophercon 2018 is rad!")
fmt.Printf("Heres a proverb:\n\n")
gopher.Proverb(os.Stdout)
}

24
zaquestion/vendor/github.com/adamryman/gophersay/LICENSE.md сгенерированный поставляемый Normal file
Просмотреть файл

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>

58
zaquestion/vendor/github.com/adamryman/gophersay/gopher/say.go сгенерированный поставляемый Normal file
Просмотреть файл

@ -0,0 +1,58 @@
package gopher
import (
"fmt"
"io"
"log"
"math/rand"
"time"
"github.com/adamryman/gophersay/gopherart"
)
var (
sayings []string
gopherArt string
)
func init() {
// Load in gopher ascii art from go-bindata
gopherArtBytes, err := gopherart.Asset("gopherart/gopher.ascii")
if err != nil {
log.Fatal(err)
}
gopherArt = string(gopherArtBytes)
sayings = []string{
"Don't communicate by sharing memory, share memory by communicating.", "Concurrency is not parallelism.",
"Channels orchestrate; mutexes serialize.",
"The bigger the interface, the weaker the abstraction.",
"Make the zero value useful.",
"interface{} says nothing.",
"Gofmt's style is no one's favorite, yet gofmt is everyone's favorite.",
"A little copying is better than a little dependency.",
"Syscall must always be guarded with build tags.",
"Cgo must always be guarded with build tags.",
"Cgo is not Go.",
"With the unsafe package there are no guarantees.",
"Clear is better than clever.",
"Reflection is never clear.",
"Errors are values.",
"Don't just check errors, handle them gracefully.",
"Design the architecture, name the components, document the details.",
"Documentation is for users.",
"Don't panic.",
}
}
func Proverb(w io.Writer) {
rand.Seed(time.Now().UnixNano())
saying := sayings[rand.Intn(len(sayings))]
Say(w, saying)
}
func Say(w io.Writer, saying string) {
fmt.Fprintf(w, " ------------------------\n%s\n%s",
saying,
gopherArt,
)
}

15
zaquestion/vendor/github.com/adamryman/gophersay/gopherart/gopher.ascii сгенерированный поставляемый Normal file
Просмотреть файл

@ -0,0 +1,15 @@
------------------------
\
\
\ ,_---~~~~~----._
_,,_,*^____ _____``*g*\"*,
/ __/ /' ^. / \ ^@q f
[ @f | @)) | | @)) l 0 _/
\`/ \~____ / __ \_____/ \
| _l__l_ I
} [______] I
] | | | |
] ~ ~ |
| |
| |

237
zaquestion/vendor/github.com/adamryman/gophersay/gopherart/gopherart.go сгенерированный поставляемый Normal file
Просмотреть файл

@ -0,0 +1,237 @@
// Code generated by go-bindata.
// sources:
// gopherart/gopher.ascii
// DO NOT EDIT!
package gopherart
import (
"bytes"
"compress/gzip"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
"strings"
"time"
)
func bindataRead(data []byte, name string) ([]byte, error) {
gz, err := gzip.NewReader(bytes.NewBuffer(data))
if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err)
}
var buf bytes.Buffer
_, err = io.Copy(&buf, gz)
clErr := gz.Close()
if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err)
}
if clErr != nil {
return nil, err
}
return buf.Bytes(), nil
}
type asset struct {
bytes []byte
info os.FileInfo
}
type bindataFileInfo struct {
name string
size int64
mode os.FileMode
modTime time.Time
}
func (fi bindataFileInfo) Name() string {
return fi.name
}
func (fi bindataFileInfo) Size() int64 {
return fi.size
}
func (fi bindataFileInfo) Mode() os.FileMode {
return fi.mode
}
func (fi bindataFileInfo) ModTime() time.Time {
return fi.modTime
}
func (fi bindataFileInfo) IsDir() bool {
return false
}
func (fi bindataFileInfo) Sys() interface{} {
return nil
}
var _gopherartGopherAscii = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x8e\x3d\x16\x82\x30\x10\x84\xfb\x9c\x62\x9e\x8d\x8f\xbc\x48\x3c\x02\xad\x67\x20\xb2\x54\xd8\xd0\xd8\x47\xce\xee\xec\xf2\x23\xc1\xa7\x03\x84\x64\xf6\xdb\xc9\xe2\xf2\x43\x0e\x40\xd2\x65\x59\x91\xf8\x05\x61\x65\x52\x29\x52\x0b\x56\x11\x91\x10\x24\xf8\x4e\xa8\xd9\xd3\x9d\xf4\xbd\x7f\xf8\x74\xf2\x81\x48\xa4\x15\x11\xcf\x56\xed\x6a\xd0\x58\x92\xbb\xe6\xc9\xff\x00\xd7\x02\xcd\x80\x8c\xa6\xaa\xb4\x92\xb1\xed\x47\xe0\x0a\xb6\x33\x27\xf5\xda\x98\x26\xbb\x4a\x43\x91\xec\xae\xb8\x8e\xe9\xac\x73\x93\x8c\xc2\x77\x67\xdc\x66\xe6\xf5\x71\x5a\x0b\x90\x7b\x09\x91\xd9\x3b\x0c\xcd\x45\xb0\x1e\x8e\x0c\x26\x3e\xdf\x4c\xd1\x76\x54\x9e\xe7\xf9\x0b\x19\xe3\xde\x01\x00\x00\xff\xff\xe9\x5c\x37\x0d\xaf\x01\x00\x00")
func gopherartGopherAsciiBytes() ([]byte, error) {
return bindataRead(
_gopherartGopherAscii,
"gopherart/gopher.ascii",
)
}
func gopherartGopherAscii() (*asset, error) {
bytes, err := gopherartGopherAsciiBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "gopherart/gopher.ascii", size: 431, mode: os.FileMode(436), modTime: time.Unix(1468565140, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
a, err := f()
if err != nil {
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
}
return a.bytes, nil
}
return nil, fmt.Errorf("Asset %s not found", name)
}
// MustAsset is like Asset but panics when Asset would return an error.
// It simplifies safe initialization of global variables.
func MustAsset(name string) []byte {
a, err := Asset(name)
if err != nil {
panic("asset: Asset(" + name + "): " + err.Error())
}
return a
}
// AssetInfo loads and returns the asset info for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func AssetInfo(name string) (os.FileInfo, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
a, err := f()
if err != nil {
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
}
return a.info, nil
}
return nil, fmt.Errorf("AssetInfo %s not found", name)
}
// AssetNames returns the names of the assets.
func AssetNames() []string {
names := make([]string, 0, len(_bindata))
for name := range _bindata {
names = append(names, name)
}
return names
}
// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() (*asset, error){
"gopherart/gopher.ascii": gopherartGopherAscii,
}
// AssetDir returns the file names below a certain
// directory embedded in the file by go-bindata.
// For example if you run go-bindata on data/... and data contains the
// following hierarchy:
// data/
// foo.txt
// img/
// a.png
// b.png
// then AssetDir("data") would return []string{"foo.txt", "img"}
// AssetDir("data/img") would return []string{"a.png", "b.png"}
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
// AssetDir("") will return []string{"data"}.
func AssetDir(name string) ([]string, error) {
node := _bintree
if len(name) != 0 {
cannonicalName := strings.Replace(name, "\\", "/", -1)
pathList := strings.Split(cannonicalName, "/")
for _, p := range pathList {
node = node.Children[p]
if node == nil {
return nil, fmt.Errorf("Asset %s not found", name)
}
}
}
if node.Func != nil {
return nil, fmt.Errorf("Asset %s not found", name)
}
rv := make([]string, 0, len(node.Children))
for childName := range node.Children {
rv = append(rv, childName)
}
return rv, nil
}
type bintree struct {
Func func() (*asset, error)
Children map[string]*bintree
}
var _bintree = &bintree{nil, map[string]*bintree{
"gopherart": &bintree{nil, map[string]*bintree{
"gopher.ascii": &bintree{gopherartGopherAscii, map[string]*bintree{}},
}},
}}
// RestoreAsset restores an asset under the given directory
func RestoreAsset(dir, name string) error {
data, err := Asset(name)
if err != nil {
return err
}
info, err := AssetInfo(name)
if err != nil {
return err
}
err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
if err != nil {
return err
}
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
if err != nil {
return err
}
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
if err != nil {
return err
}
return nil
}
// RestoreAssets restores an asset under the given directory recursively
func RestoreAssets(dir, name string) error {
children, err := AssetDir(name)
// File
if err != nil {
return RestoreAsset(dir, name)
}
// Dir
for _, child := range children {
err = RestoreAssets(dir, filepath.Join(name, child))
if err != nil {
return err
}
}
return nil
}
func _filePath(dir, name string) string {
cannonicalName := strings.Replace(name, "\\", "/", -1)
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
}