-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
tedjmzhang
committed
Jul 7, 2024
1 parent
a7b88ed
commit b7c7c2b
Showing
10 changed files
with
221 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
module example.com/greetings | ||
|
||
go 1.20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/* | ||
* @Author: tedjmzhang [email protected] | ||
* @Date: 2024-07-06 16:08:07 | ||
* @LastEditors: tedjmzhang [email protected] | ||
* @LastEditTime: 2024-07-06 16:15:03 | ||
* @FilePath: /webpack-org/blog/src/backend/go/greetings/greeting_test.go | ||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE | ||
*/ | ||
package greetings | ||
|
||
import ( | ||
"regexp" | ||
"testing" | ||
) | ||
|
||
func TestHelloName(t *testing.T) { | ||
name := "Gladys" | ||
want := regexp.MustCompile(`\b` + name + `\b`) | ||
msg, err := Hello("Gladys") | ||
if !want.MatchString(msg) || err != nil { | ||
t.Fatalf(`Hello("Gladys) = %q, %v, want match for %#q, nil`, msg, err, want) | ||
} | ||
} | ||
|
||
func TestHelloEmpty(t *testing.T) { | ||
msg, err := Hello("") | ||
if msg != "" || err == nil { | ||
t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/* | ||
* @Author: tedjmzhang [email protected] | ||
* @Date: 2024-07-06 15:18:55 | ||
* @LastEditors: tedjmzhang [email protected] | ||
* @LastEditTime: 2024-07-06 16:17:31 | ||
* @FilePath: /webpack-org/blog/src/backend/go/greetings/grettings.go | ||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE | ||
*/ | ||
package greetings | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
"math/rand" | ||
) | ||
|
||
func Hello(name string) (string, error) { | ||
if name == "" { | ||
return "", errors.New("empty name") | ||
} | ||
message := fmt.Sprintf(randomFormat(), name) | ||
// message := fmt.Sprint(randomFormat()) | ||
return message, nil | ||
} | ||
|
||
func randomFormat() string { | ||
formats := []string{ | ||
"HI, %v. Welcome", | ||
"Great to see you, %v!", | ||
"Hail, %v! Well met!", | ||
} | ||
return formats[rand.Intn(len(formats))] | ||
} | ||
|
||
func Hellos(names []string) (map[string]string, error) { | ||
messages := make(map[string]string) | ||
|
||
for _, name := range names { | ||
message, err := Hello(name) | ||
if err != nil { | ||
return nil, err | ||
} | ||
messages[name] = message | ||
} | ||
|
||
return messages, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
module example/hello | ||
|
||
go 1.20 | ||
|
||
require example.com/greetings v0.0.0-00010101000000-000000000000 | ||
|
||
replace example.com/greetings => ../greetings |
Empty file.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* @Author: tedjmzhang [email protected] | ||
* @Date: 2024-07-06 00:09:37 | ||
* @LastEditors: tedjmzhang [email protected] | ||
* @LastEditTime: 2024-07-06 16:03:21 | ||
* @FilePath: /webpack-org/blog/src/backend/go/hello/hello.go | ||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE | ||
*/ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"log" | ||
|
||
"example.com/greetings" | ||
) | ||
|
||
func main() { | ||
log.SetPrefix("greetings: ") | ||
log.SetFlags(0) | ||
|
||
names := []string{"Gladys", "Samantha", "Darrin"} | ||
messages, err := greetings.Hellos(names) | ||
if err != nil { | ||
log.Fatal((err)) | ||
} | ||
fmt.Println(messages) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
<!-- | ||
* @Author: tedjmzhang [email protected] | ||
* @Date: 2024-07-06 00:05:53 | ||
* @LastEditors: tedjmzhang [email protected] | ||
* @LastEditTime: 2024-07-06 16:57:43 | ||
* @FilePath: /webpack-org/blog/src/backend/go/index.md | ||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE | ||
--> | ||
go | ||
|
||
- 流程大概 | ||
1. 使用`go mod init example/hello`创建module,命令会创建一个go.mod文件,文件包含包module名称 | ||
``` go | ||
// go.mod | ||
module example/hello | ||
|
||
go 1.20 | ||
``` | ||
|
||
2. 编写`hello.go`文件,`go run .`会执行该目录下面的所有文件的package为main的函数 | ||
``` | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"log" | ||
|
||
"example.com/greetings" | ||
) | ||
|
||
func main() { | ||
log.SetPrefix("greetings: ") | ||
log.SetFlags(0) | ||
|
||
names := []string{"Gladys", "Samantha", "Darrin"} | ||
messages, err := greetings.Hellos(names) | ||
if err != nil { | ||
log.Fatal((err)) | ||
} | ||
fmt.Println(messages) | ||
} | ||
|
||
``` | ||
|
||
3. 编写另外一个module,名为`example.com/greetings`,操作如上,该module有Hello和Hellos两个方法(方法首字母大写表示可由其他module调用,否则只能自己内部调用) | ||
|
||
4. 使用`go mod edit -replace example.com/greetings=../greetings`命令替换使用本地模块,不然会去pkg.go.dev下载远程已经发布的模块。运行完成之后hello/go.mod会改变 | ||
``` | ||
// +++ | ||
replace example.com/greetings => ../greetings | ||
``` | ||
|
||
5. 执行`go mod tidy`,会自动整理代码里面所有依赖,反应到go.mod文件中 | ||
``` | ||
// +++ | ||
require example.com/greetings v0.0.0-00010101000000-000000000000 | ||
``` | ||
|
||
6. 执行`go run .`会执行该main方法 | ||
|
||
7. 执行`go build`会在当前目录生成hello的二进制文件,可通过命令行`./hello`运行代码 | ||
|
||
8. 执行`go install`会将hello文件生成到由`go list -f '{{.Target}}'`返回的目录之中,通过将该目录暴露到PATH,可以在全局直接`hello`执行该二进制程序 | ||
|
||
- 一些语法知识 | ||
1. message := fmt.Sprintf("Hi, %v. Welcome!", name) | ||
表示缩写,意思同以下 | ||
var message string | ||
message = fmt.Sprintf("Hi, %v. Welcome!", name) | ||
2. messages, err := greetings.Hellos(names) | ||
表示greetings.Hellos函数返回两个值,一个值为message,一个为err | ||
3. names := []string{"Gladys", "Samantha", "Darrin"} | ||
表示names为一个slice(类似js的数组),有三个值,都是为string | ||
4. messages := make(map[string]int) | ||
表示messages为一个map(类似js的map)map的key为string和value为int,通过messages[key] = value来添加 | ||
5. for _, name := range names {...} | ||
表示一个for循环,range返回两个值,index和item,如果不需要使用index,则可以使用_来优化代码 | ||
|
||
- 测试 go test | ||
会执行该目录下,以_test.go结尾的程序。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
module test | ||
|
||
go 1.20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* | ||
* @Author: tedjmzhang [email protected] | ||
* @Date: 2024-07-06 17:12:13 | ||
* @LastEditors: tedjmzhang [email protected] | ||
* @LastEditTime: 2024-07-06 17:12:40 | ||
* @FilePath: /webpack-org/blog/src/backend/go/test/test.go | ||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE | ||
*/ | ||
package main | ||
|
||
import "fmt" | ||
|
||
func main() { | ||
i, j := 42, 2701 | ||
|
||
p := &i // 指向 i | ||
fmt.Println(*p) // 通过指针读取 i 的值 | ||
*p = 21 // 通过指针设置 i 的值 | ||
fmt.Println(i) // 查看 i 的值 | ||
|
||
p = &j // 指向 j | ||
*p = *p / 37 // 通过指针对 j 进行除法运算 | ||
fmt.Println(j) // 查看 j 的值 |