golang c 语言教程中文,你的首个golang语言详细入门教程 | your first golang tutorial

your first golang tutorial

go tutorial

versions:

go: 1.13.1

install

wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.13.1.linux-amd64.tar.gz

ll /usr/local/go

vim ~/.bashrc

export PATH=$PATH:/usr/local/go/bin

source ~/.bashrc

zsh uses env profile ~/.zshrc, bash use env profile ~/.bashrc.

check version

go version

go version go1.13.1 linux/amd64

uninstall

just delete /usr/local/go

set GOPATH

Create your workspace directory, $HOME/go.

The GOPATH environment variable specifies the location of your workspace. If no GOPATH is set, it is assumed to be $HOME/go on Unix systems.

Note that GOPATH must not be the same path as your Go installation.

issue the commands

vim .bashrc

# for golang

export GOPATH=$HOME/go

export PATH=/usr/local/go/bin:$GOPATH:$PATH

source .bashrc

#go env -w GOPATH=$HOME/go

$ echo $GOPATH

/home/kezunlin/go

$ go env GOPATH

/home/kezunlin/go

code organization

Go programmers typically keep all their Go code in a single workspace.

A workspace contains many version control repositories (managed by Git, for example).

Each repository contains one or more packages.

Each package consists of one or more Go source files in a single directory.

The path to a package's directory determines its import path.

like this

bin/

hello # command executable

outyet # command executable

src/

github.com/golang/example/

.git/ # Git repository metadata

hello/

hello.go # command source

outyet/

main.go # command source

main_test.go # test source

stringutil/

reverse.go # package source

reverse_test.go # test source

golang.org/x/image/

.git/ # Git repository metadata

bmp/

reader.go # package source

writer.go # package source

... (many more repositories and packages omitted) ...

Note that symbolic links should not be used to link files or directories into your workspace.

An import path is a string that uniquely identifies a package.

go example

your first program

mkdir -p $GOPATH/src/github.com/kezunlin/hello

cd $GOPATH/src/github.com/kezunlin/hello

vim hello.go

with code

package main

import "fmt"

func main() {

fmt.Printf("hello, world\n")

}

build and run

go build

./hello

hello, world

install and clean binary files

# install hello to $HOME/go/bin

go install

# clean $HOME/go/bin/*

go clean -i

~/go/src$ go build github.com/kezunlin/hello/ ~/go/src$ go install github.com/kezunlin/hello/

your first library

stringutil library

mkdir -p $GOPATH/src/github.com/kezunlin/stringutil

cd $GOPATH/src/github.com/kezunlin/stringutil

vim reverse.go

code

// Package stringutil contains utility functions for working with strings.

package stringutil

// Reverse returns its argument string reversed rune-wise left to right.

func Reverse(s string) string {

r := []rune(s)

for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {

r[i], r[j] = r[j], r[i]

}

return string(r)

}

package name

where name is the package's default name for imports. (All files in a package must use the same name.) executable commands must always use package main.

build library

go build github.com/kezunlin/stringutil

#This won't produce an output file. Instead it saves

#the compiled package in the local build cache.

use stringutil in hello.go

package main

import (

"fmt"

"github.com/kezunlin/stringutil"

)

func main() {

fmt.Printf("hello, world\n")

fmt.Println(stringutil.Reverse("!oG ,olleH"))

}

build and install

go build github.com/kezunlin/hello

go install github.com/kezunlin/hello

~/go/bin$ ./hello

hello, world

Hello, Go!

folder structure

tree .

.

├── bin

│   └── hello

└── src

└── github.com

└── kezunlin

├── hello

│   └── hello.go

└── stringutil

└── reverse.go

6 directories, 3 files

testing

You write a test by creating a file with a name ending in _test.go that contains functions named TestXXX with signature func (t *testing.T). The test framework runs each such function; if the function calls a failure function such as t.Error or t.Fail, the test is considered to have failed.

file name: xxx_test.go

function name: TextXXX

error: t.Error or t.Fail

package stringutil

import "testing"

func TestReverse(t *testing.T) {

cases := []struct {

in, want string

}{

{"Hello, world", "dlrow ,olleH"},

{"Hello, 世界", "界世 ,olleH"},

{"", ""},

}

for _, c := range cases {

got := Reverse(c.in)

if got != c.want {

t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)

}

}

}

test ok

$ go test github.com/kezunlin/stringutil

ok github.com/kezunlin/stringutil 0.165s

test error

--- FAIL: TestReverse (0.00s)

reverse_test.go:16: Reverse("Hello, 世界2") == "2界世 ,olleH", want "界世 ,olleH"

FAIL

exit status 1

FAIL github.com/kezunlin/stringutil 0.003s

remote packages

$ go get github.com/golang/example/hello

$ $GOPATH/bin/hello

Hello, Go examples!

go commands

go help gopath

go help importpath

go help test

go build

go install

go clean

go get # fetch,build and install

Reference

History

20191011: created.

Copyright

Post author: kezunlin

Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值