从零开始的go世界(1)

216 阅读1分钟

函数

package main

import "fmt"

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

func main(){
    fmt.Println(add(11 , 12))
}

参数类型相同时可以缩写

package main

import "fmt"

func add (x, y int) int {
    return x + y;
} 

func main(){
    fmt.Println(add(11 , 12))
}

返回值

多值返回

package main

import "fmt"

func swap(x , y string) (string , string){
    return x , y
}

func main(){
    a , b:=swap("hello","world")
    fmt.Println(a , b)
}

命名返回

package main

import "fmt"

func split(sum int) (x, y int){
    x = sum/2
    y = sum/1
    return 
}

func main(){
    fmt.Println(split(17))
}

变量

var语句可以出现在包或函数级别。

package main

import "fmt"

var c , py , java

func main(){
    var i int 
    fmt.Println(i, c, py, java)
}

初始化

package main
import "fmt"

var i , j int = 1, 2
func main(){
    var c, py, java = true, false, "no!"
    fmt.Println(i, j, c, python, java)
}

短变量声明

package main 
import "fmt"

func main(){
    var i , j int = 1, 2
    k := 3
    c, py, java := true, false, "no!"
    fmt.Println(i, j, k, c, python, java)
}

基本类型

go的基本类型有bool, int, string,int16. int32, int64, uint, uint8, uint16, uint32, uint64, uintptr

package main

import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
	fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
	fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
	fmt.Printf("Type: %T Value: %v\n", z, z)
}

零值

没有明确初始值的变量声明会被赋予它们的 零值

零值是:

  • 数值类型为 0
  • 布尔类型为 false
  • 字符串为 ""(空字符串)。
package main

import "fmt"

func main() {
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

类型转换

Go 在不同类型的项之间赋值时需要显式转换。

package main
import "fmt"

func main(){
    var i int = 42
    var f float64 = float64(i)
    var u uint = uint(f)
    
    i :=42
    f :=float64(i)
    u :=uint(f)
}

类型推导

package main

import "fmt"

func main() {
	v := 42 // 修改这里!
        s := "hi"
	fmt.Printf("v is of type %T\n", v)
}

常量

常量的声明与变量类似,只不过是使用 const 关键字。

常量可以是字符、字符串、布尔值或数值。

常量不能用 := 语法声明。


package main

import "fmt"

func main() {
	const World = "世界"
	fmt.Println("Hello", World)

	const Truth = true
	fmt.Println("Go rules?", Truth)
}

数值常量

数值常量是高精度的 ,一个未指定类型的常量由上下文来决定其类型。

package main
import "fmt"

const(
    a = 1 << 10
    b = 2 >> 10
)

func needInt(x int) int { return x*10 + 1 }

func needFloat(x float64) float64 {
	return x * 0.1
}

func main(){
    fmt.Println(needInt(a))
    fmt.Println(needFloat(a))
    fmt.Println(needFloat(b))
}