【Day 20】Go 基础语法

Python 改学 Go 之 基础语法小笔记

学习计画因为听到公司用 Go 而改为学 Go,
翻阅一些教学文决定参考铁人赛的文章~
主要想参考的系列:

一样是自己的笔记,会省略我知道或不想记的东西,对别人应该没什麽参考价值。
明天从 day7 - 指标 继续看下去。

宣告赋值

  • 静态型别
  • 只要有宣告,就会填上那个型别的预设值,不像 C 没初始化会吃到脏东西
  • 宣告 + 赋值
var i1, i2, i3 int

var (
	i4 int = 1000
	s string = "meow"
	bool_arr []bool
)

// function type, return bool
var meow func() bool

// just like Python (;
var a, b = 1, "string"
  • :=
    local1, local2 := 1, 2 既可宣告又可赋值,还不用写 var。
    只能在 function 里面用

string

  • 没有字元,但有 string,字元其实是用整数来表示,然後给个 alias 叫 byte 和 rune
var ascii byte = 'I'
var utf8 rune = 'E'

%T 印出型别,例如 fmt.Printf("%d %T \n", ascii, ascii)
可以知道 byte 是 uint8 的别称,rune 则是 int32

  • 多行 string 用 ` (backtick)
    manystrings := `meow
this is cool`

不过不能缩排因为从第一行到第二行中间的空格都会被印出来

const

  • keyword iota 很酷
type Hero int

const (
    IronMan Hero = iota*2 + 1
    DrStrange
    Thor
    Hulk
)

fmt.Println(IronMan, DrStrange, Thor, Hulk)
// 印出: 1 3 5 7

function

  • First-class citizen!!
    可定义一个 function 变数然後传 function,但 function definition 要对。
func myfunc(v1, v2 int) int {
    //....
}
var func_var func(a, b int) int
func_var = myfunc
  • 可以命名回传值,回传时就不用特别写
func addAndMinus(a, b int) (c int, d int) {
	c = a + b
	d = a - b
	return
}
  • 匿名函式
// foo函式接收2个整数和一个函式变数
func foo(a, b int, f func(a, b int) int) int {
	return f(a, b)
}

func main() {
	var add = func(a, b int) int {
		return a + b
	}

	a := foo(1, 2, add)
	fmt.Printf("%d\n", a)
	// 印出: 3
}

条件判断 if / switch

  • else if
  • if 条件之前还可以写一个 expression(有够怪)
    if myAge = myAge - 15; myAge < 20 {....略
    也可以:=宣告新变数,虽然不知道能用在哪
    if myAge := 30; myAge < 20 {....略
  • switch case 一个 case 可以多值!
flag := 1
switch flag {
case 0, 1:
    fmt.Println("Zero - First")
case 2, 3, 4:
    fmt.Println("Second - Four")
default:
    fmt.Println("Other")
}

for

  • 没有 while 怪怪怪
  • 用 for 做 while 的事
    for i < 10 { i++ }
    for {} 无穷回圈 (while True:)

goto

有 goto ㄋ


<<:  [day20]Vue实作-登入功能实作串接後端API(下)

>>:  JavaScript 闭包(Closure) 上集

[Day27]What is mapping?

hi!今天要介绍mapping!其实mapping很像一个hash table,有很多时候都会有一...

mac, windows 安装 scrapy 失败解法摘要

今天安装 scrapy 时,在两个系统下都出现长篇红字错误,在此做个解决纪录。两个系统者皆在终端跟 ...

D17. 学习基础C、C++语言

D17. 题目练习 大小写转换 转大写 #include<stdio.h> #inclu...

Day07:Swift 基础语法-Struct 与 Class 的差异

前言 前面两篇文章学习了 Struct 和 Class, 两者用法相同、功能相似, 都可以用来储存 ...

Day15 竞合的团队气氛塑造 - Release line

团队成员的气氛,就应该是既竞争又是合作,而这个最高境界很大一部份要上面的PM推动。 因为人性是这样的...