feature: add auto-build-and-test workflow for go (#1019)

* fix(csharp): unified array statement

* feature: add workflow for go/js/ts/zig

* fix python UnicodeDecodeError on windows

* Update space_complexity.go

* Update space_complexity_test.go

* Update space_complexity.go

* remove nodejs, zip workflow

---------

Co-authored-by: Yudong Jin <krahets@163.com>
This commit is contained in:
hpstory 2024-01-12 14:17:21 +08:00 committed by GitHub
parent d85a3bb74d
commit b9ae4ffe9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 35 deletions

36
.github/workflows/go.yml vendored Normal file
View file

@ -0,0 +1,36 @@
name: Go
on:
push:
branches: [ "main" ]
paths: ["codes/go/**/*.go"]
pull_request:
branches: [ "main" ]
paths: ["codes/go/**/*.go"]
workflow_dispatch:
jobs:
build:
name: Go ${{ matrix.go-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: codes/go/
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
go-version: ["1.19.x"]
steps:
- uses: actions/checkout@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
- name: Check out code into the Go module directory
run: go get -v -t -d ./...
- name: Build
run: go build -v ./...
- name: Test with Go
run: go test -v ./...

View file

@ -7,6 +7,8 @@ package chapter_computational_complexity
import ( import (
"fmt" "fmt"
"strconv" "strconv"
. "github.com/krahets/hello-algo/pkg"
) )
/* 结构体 */ /* 结构体 */
@ -15,33 +17,11 @@ type node struct {
next *node next *node
} }
/* treeNode 二叉树 */
type treeNode struct {
val int
left *treeNode
right *treeNode
}
/* 创建 node 结构体 */ /* 创建 node 结构体 */
func newNode(val int) *node { func newNode(val int) *node {
return &node{val: val} return &node{val: val}
} }
/* 创建 treeNode 结构体 */
func newTreeNode(val int) *treeNode {
return &treeNode{val: val}
}
/* 输出二叉树 */
func printTree(root *treeNode) {
if root == nil {
return
}
fmt.Println(root.val)
printTree(root.left)
printTree(root.right)
}
/* 函数 */ /* 函数 */
func function() int { func function() int {
// 执行某些操作... // 执行某些操作...
@ -54,7 +34,7 @@ func spaceConstant(n int) {
const a = 0 const a = 0
b := 0 b := 0
nums := make([]int, 10000) nums := make([]int, 10000)
ListNode := newNode(0) node := newNode(0)
// 循环中的变量占用 O(1) 空间 // 循环中的变量占用 O(1) 空间
var c int var c int
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
@ -64,7 +44,10 @@ func spaceConstant(n int) {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
function() function()
} }
fmt.Println(a, b, nums, c, ListNode) b += 0
c += 0
nums[0] = 0
node.val = 0
} }
/* 线性阶 */ /* 线性阶 */
@ -112,12 +95,12 @@ func spaceQuadraticRecur(n int) int {
} }
/* 指数阶(建立满二叉树) */ /* 指数阶(建立满二叉树) */
func buildTree(n int) *treeNode { func buildTree(n int) *TreeNode {
if n == 0 { if n == 0 {
return nil return nil
} }
root := newTreeNode(0) root := NewTreeNode(0)
root.left = buildTree(n - 1) root.Left = buildTree(n - 1)
root.right = buildTree(n - 1) root.Right = buildTree(n - 1)
return root return root
} }

View file

@ -6,25 +6,21 @@ package chapter_computational_complexity
import ( import (
"testing" "testing"
. "github.com/krahets/hello-algo/pkg"
) )
func TestSpaceComplexity(t *testing.T) { func TestSpaceComplexity(t *testing.T) {
/* ======= Test Case ======= */
n := 5 n := 5
/* ====== Driver Code ====== */
// 常数阶 // 常数阶
spaceConstant(n) spaceConstant(n)
// 线性阶 // 线性阶
spaceLinear(n) spaceLinear(n)
spaceLinearRecur(n) spaceLinearRecur(n)
// 平方阶 // 平方阶
spaceQuadratic(n) spaceQuadratic(n)
spaceQuadraticRecur(n) spaceQuadraticRecur(n)
// 指数阶 // 指数阶
root := buildTree(n) root := buildTree(n)
printTree(root) PrintTree(root)
} }

View file

@ -18,6 +18,7 @@ if __name__ == "__main__":
stderr=subprocess.PIPE, stderr=subprocess.PIPE,
text=True, text=True,
env=env, env=env,
encoding='utf-8'
) )
# Wait for the process to complete, and get the output and error messages # Wait for the process to complete, and get the output and error messages
stdout, stderr = process.communicate() stdout, stderr = process.communicate()