me icon indicating copy to clipboard operation
me copied to clipboard

学习 Go (Part 3: 快速语法)

Open nonocast opened this issue 2 years ago • 1 comments

变量

  • 常量: const x int32 = 1
  • 变量: var a int32 = 1
  • 隐式变量: a := 1
  • 类型: bool, byte, intX, floatX, rune, uintptr, string, array, struct, function, interface, map, slice, channel
  • int: 这个和C一样, int/uint跟随目标平台,int8, int16, int32则是指定长度
  • 显示类型转换: int(x), byte(y)
package main

func main() {
	message := "hello world"
	println(message)
}
  • 数组
package main

func main() {
	// var numbers [3]int32 = [3]int32{7, 8, 9}
	numbers := [3]int32{7, 8, 9}

	for i, n := range numbers {
		println(i, ":", n)
	}
}

逻辑

if

package main

func main() {
	flag := true

	if flag {
		println("flag is on")
	} else {
		println("flag is off")
	}
}

for

package main

func main() {
	for i := 0; i < 5; i++ {
		println(i)
	}
}

注: 不支持++i

for..range

package main

func main() {
	x := []int32{7, 8, 9}
	for i, n := range x {
		println(i, ":", n)
	}
}

函数

func Add(x int, y int) int {
	return x + y
}

指针

package main

func main() {
	var x int32 = 7
	var p *int32 = &x // p := &x
	println(*p)
	*p = 11
	println(x)
}

结构

package main

type Book struct {
	title  string
	author string
	price  float32
}

func main() {
	book := Book{"title1", "author1", 19.9}
	println(book.title)

}

goroutine

package main

import "time"

func foo() {
	println("foo")
}

func main() {
	go foo()
	time.Sleep(1 * time.Second)
	println("end")
}

到这里其实都非常C,在C的基础上很克制的增加了高级语法。你会很清晰的知道每个点对应C的什么痛点。

最后附上一个最简单的Gin的web app,

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	r.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "hello world")
	})

	r.GET("/ping", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "pong",
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

go build能直接生成出单个可执行文件,没有那么多依赖,就这个比nodejs香太多了。。。

nonocast avatar Aug 07 '22 12:08 nonocast

您好,我现在正在忙,可能无法亲自回复您的邮件。我将以最快的速度,尽快给您回复。 

icehoo avatar Aug 07 '22 12:08 icehoo