go言語入門
記事1、記事2を参照
1.コンパイル
2.運転
3.ヘルプを見る
ソースコードevenを記述する.go
5.パッケージの作成
ソースファイルを作成し、$GOROOTの下のsrcpkgutilsustackmディレクトリの下にファイルustackを作成します.go
パッケージの作成方法別の方法
記事3、記事4を参照
環境変数にGOPATHを加え、対応するパッケージディレクトリ(複数のディレクトリがあり得る)を指定し、以下にパッケージのディレクトリとしてsrcディレクトリを作成する
上記の例のsrcustackUStackのような対応するgoファイルを作成します.go
任意のディレクトリで実行
6.インタフェースの書き方
7リンクのコンパイル
8オペレーティングシステムディレクトリ区切り文字の取得
9ファイルまたはディレクトリが存在するかどうかを判断する
10.取得日
11.文字列を小文字に変換
12.コピーファイル関数
13.文字列の切り取り
14.ファイルの読み書き
15.文字列にサブ文字列を含む
1.コンパイル
go build test.go
2.運転
go run test.go
3.ヘルプを見る
go doc builtin
go doc fmt/fnv
4.テストの実行ソースコードevenを記述する.go
/*
this package is test for write package
*/
package even
// check value is even value
// if is even, return true, otherwise false
func Even(value int) bool {
return 0 == (value % 2)
}
func Odd(value int) bool {
return 1 == (value % 2)
}
テストコードeven_の作成test.go package even
import (
"testing"
)
func TestEvent(t *testing.T) {
if !Even(2) {
t.Log("2 should be odd")
t.Fail()
}
}
func TestOdd(t *testing.T) {
if !Odd(3) {
t.Log("3 should be odd")
t.Fail()
}
}
実行テストgo test
5.パッケージの作成
ソースファイルを作成し、$GOROOTの下のsrcpkgutilsustackmディレクトリの下にファイルustackを作成します.go
/**
simulate stack, capacity is 10
**/
package ustack
import (
"errors"
strConvUtils "strconv"
)
const stackMax = 10
type UStack struct {
index int
datas [stackMax]int
}
func (s *UStack) Push(value int) (result int, err error) {
if s.index > (stackMax - 1) {
result = -1
err = errors.New("exceed max size")
return
}
s.datas[s.index] = value
result = s.index
s.index++
return
}
func (s *UStack) Pop() (result int, err error) {
if s.index < 1 {
result = -2
err = errors.New("exceed min size")
return
}
result = s.datas[s.index-1]
s.index--
return
}
func (s *UStack) String() (str string) {
for i := 0; i < s.index; i++ {
str = str + "[" + strConvUtils.Itoa(i) + ":" + strConvUtils.Itoa(s.datas[i]) + "]"
}
return
}
パッケージ内の関数とタイプが外部にアクセスできることに注意してください.名前の最初の文字は大文字でなければなりません.go build ustack.go
go install
ustack.a$GOROOT下のpkgwindows_386utilsustackディレクトリまたはpkglinux_386\utils\ustack パッケージの作成方法別の方法
記事3、記事4を参照
環境変数にGOPATHを加え、対応するパッケージディレクトリ(複数のディレクトリがあり得る)を指定し、以下にパッケージのディレクトリとしてsrcディレクトリを作成する
上記の例のsrcustackUStackのような対応するgoファイルを作成します.go
任意のディレクトリで実行
go install ustack
対応するgopathディレクトリの下で自動的にpkgディレクトリを生成する6.インタフェースの書き方
type IFactory interface {
getRunApp() IRunApp
}
type AppTools struct {
m_Factory FactoryImpl
}
type IRunApp interface {
run()
}
type RunAppImpl struct {
}
type FactoryImpl struct {
m_RunApp RunAppImpl
}
func (factory *FactoryImpl) getRunApp() IRunApp {
return &factory.m_RunApp
}
func (runApp *RunAppImpl) run() {
}
func (appTools *AppTools) getFactory() IFactory {
return &appTools.m_Factory
}
7リンクのコンパイル
8g 123.go
8l -o 123.out 123.8
8オペレーティングシステムディレクトリ区切り文字の取得
filepath.Separator
9ファイルまたはディレクトリが存在するかどうかを判断する
func (appTools *AppTools) pathExists(pathName string) bool {
if appTools.judgeEmptyStr(&pathName) {
return false
}
_, err := ioutil.ReadDir(pathName)
if nil != err {
return false
}
return true
}
func (appTools *AppTools) fileExists(fileName string) bool {
f, err := os.Open(fileName)
if err != nil && os.IsNotExist(err) {
return false
}
defer f.Close()
return true
}
10.取得日
func (appTools *AppTools) getCurrentTime() string {
return time.Now().Format("2006-01-02 15:04:05")
}
11.文字列を小文字に変換
strings.ToLower
12.コピーファイル関数
func (appTools *AppTools) copyFile(src, dst string) bool {
srcFile, err := os.Open(src)
if err != nil {
appTools.log(fmt.Sprintln("Open", src, "failed", err.Error()))
return false
}
defer srcFile.Close()
dstFile, err := os.Create(dst)
if err != nil {
appTools.log(fmt.Sprintln("create", dst, "failed", err.Error()))
return false
}
defer dstFile.Close()
w, err := io.Copy(dstFile, srcFile)
w = w + 1
if nil != err {
appTools.log(fmt.Sprintln("Copy", src, "to", dst, "failed", err.Error()))
return false
}
return true
}
13.文字列の切り取り
func (appTools *AppTools) substr(str string, start, count int) string {
rs := []rune(str)
rl := len(rs)
end := 0
if start < 0 {
start = 0
}
if start > rl {
return ""
}
if start < 0 {
start = 0
}
if start > rl {
start = rl
}
end = start + count
if end > rl-1 {
end = rl
}
return string(rs[start:end])
}
14.ファイルの読み書き
srcFile, err := os.OpenFile(hName, os.O_RDONLY, 0666)
if nil != err {
appTools.log(fmt.Sprintln("file", hName, "open failed", err.Error()))
return
}
defer srcFile.Close()
tempFile, err := os.OpenFile(tempFileName, os.O_APPEND|os.O_RDWR, 0666)
if nil != err {
appTools.log(fmt.Sprintln("file", tempFileName, "open failed", err.Error()))
return
}
defer tempFile.Close()
srcReader := bufio.NewReader(srcFile)
destWriter := bufio.NewWriter(tempFile)
defer destWriter.Flush()
for {
str, err := srcReader.ReadString('
')
if nil != err {
if io.EOF != err {
appTools.log(err.Error())
}
break
}
_, err = destWriter.WriteString(str)
if nil != err {
appTools.log(err.Error())
}
}
}
15.文字列にサブ文字列を含む
//
strings.Contains(str, substr)
//
strings.HasSuffix(str, substr)
//
strings.HasPrefix(str, substr)